1. Not finding help here? Sign up for a free 30min tutor trial with Chegg Tutors
    Dismiss Notice
Dismiss Notice
Join Physics Forums Today!
The friendliest, high quality science and math community on the planet! Everyone who loves science is here!

Abstract Class return

  1. Mar 11, 2015 #1
    1. The problem statement, all variables and given/known data

    How can I return a new class object in an abstract class?


    2. Relevant equations

    None

    3. The attempt at a solution

    Suppose I have an abstract class named Animal (there are many other animal types that are made as classes). In this abstract class it has two methods, reproduction(Animal otherAnimal) and reproducing(Animal otherAnimal). Reproduction determines if the animal can reproduce with another instance of an animal. Reproducing should return a new Animal of the same type if reproduction is possible, but I do not know how to do this because the class is abstract.

    Code (Java):
    public abstract class Animal{

        public abstract boolean reproduction(Animal otherAnimal);
       
        public Animal reproducing(Animal otherAnimal) {
            if (reproduction(otherAnimal) == true) {
                return ... //how can I return a new Animal of the same type?    
            }
            else {
                return null;      
            }
        }
    }
     
  2. jcsd
  3. Mar 11, 2015 #2

    Borg

    User Avatar
    Science Advisor
    Gold Member

    You could modify the reproduction(otherAnimal) method to return the type of Animal instead of a boolean. Otherwise your reproducing() method would have to know about all of the different variations that could be produced by all animals.

    For example, if a horse has its reproduction method called by another horse, you could return a horse. If it's called by a donkey then it would return a mule. If it is called by some other animal like a tiger, then return null. The reproduction method for a horse would just have to know about donkeys and other horses. Once you implement it, you'll see that the reproducing method isn't really necessary - just the reproduction() method.
     
  4. Mar 11, 2015 #3
    But I need these two methods. The reproduction method should only return whether or not two instances can reproduce and nothing more.
     
  5. Mar 11, 2015 #4

    Borg

    User Avatar
    Science Advisor
    Gold Member

    Is reproducing() required by your instructor? What if you had reproduction() return null when a viable animal wasn't possible?
     
  6. Mar 11, 2015 #5
    Yup.

    The details of reproduction with other animals will be written in different classes which will be a subclass of Animal so reproduction with two different animals that aren't possible should not occur.
     
  7. Mar 11, 2015 #6

    Borg

    User Avatar
    Science Advisor
    Gold Member

    If you put reproducing() in the abstract Animal class, it's going to have to be able to return every type of possible animal. It would be better to implement it in the classes that implement Animal. Then a horse class won't have to know about tigers or bears.
     
  8. Mar 11, 2015 #7
    So I should make the reproducing method abstract in the house class and implement it through my subclasses?

    Also, I noticed that if I do "reproduction(otherAnimal) == true" I will have infinite reproducing. How can I go about fixing that?
     
  9. Mar 11, 2015 #8

    Borg

    User Avatar
    Science Advisor
    Gold Member

    Did you mean the Animal class? Then yes.
    Why do you think that? Maybe I'm not following what you're writing it at this point. Can you post your current code as we've discussed?
     
  10. Mar 11, 2015 #9
    Opps, I meant Animal. Thank you!

    For example, if one animal can reproduce with another, I want to limit the chance of reproduction somehow such that I won't have infinite reproduction, e.g.

    if ((((reproduction(otherAnimal) == true) == true) == true) == true).

    Because I was told to never compare a boolean expression with a boolean literal.
     
  11. Mar 11, 2015 #10

    Borg

    User Avatar
    Science Advisor
    Gold Member

    I don't think that it will be a problem. For now, can you scope out what you think the reproduction(otherAnimal) method will look like if you implement it inside of a Horse class?
     
  12. Mar 11, 2015 #11
    If I implement it in a subclass of a Animal which is called Horse then I will have to override the reproduction method to reproduce with, lets say with a class of Donkeys, but with no other subclass of Animal. And each subclass of Animal can only reproduce with animals that are predetermined.
     
  13. Mar 11, 2015 #12

    Borg

    User Avatar
    Science Advisor
    Gold Member

    The reproduction method takes an Animal class. You can pass any animal in. A donkey is just another type of animal. Also, keep in mind that the otherAnimal object isn't a donkey or a tiger or a bear. It's an Animal.
     
  14. Mar 11, 2015 #13
    I see, thank you!
     
  15. Mar 11, 2015 #14

    Borg

    User Avatar
    Science Advisor
    Gold Member

    You're welcome. I'll be interested to see the final result. :smile:
     
  16. Mar 11, 2015 #15
    Will do! It might take me awhile because it's a long code (most likely tomorrow) but I definitely post it once I am done.
     
Know someone interested in this topic? Share this thread via Reddit, Google+, Twitter, or Facebook

Have something to add?
Draft saved Draft deleted