I have three classes (Carnivore
, Herbivore
, and Plant
) that extend another class (Organism
). How can I tell which subclass an object is a part of? So far I have a property that has the classes' name, but I think it could be possible to use an operator similar to javascript's typeof. (Similar to: Organism typeof Carnivore
)
问题:
回答1:
You can use the instanceof
keyword.
Note, however, that needing to use this is often a sign of a bad design. You should typically write method overrides in each of your derived classes so that you don't explicitly need to check which class something is.
回答2:
You can say if( animal instanceof Carnivore )
to find out if it is a Carnivore or a descendant thereof, and you can use if( animal.getClass() == Carnivore.class )
to find out if it is exactly a Carnivore and not a descendant thereof.
However, the fact that you need to perform a check of this kind usually means that you have a flaw in your design, a missing overridable method, or something like that.
回答3:
Java has an instanceof
operator. However, that type of thing can be contrary to object-oriented design.
回答4:
You can use the instanceof
operator
回答5:
objInstance instanceof Carnivore
. Here objInstance is the object you want to test.
回答6:
Take a look at instanceof
operator
http://docs.oracle.com/javase/tutorial/java/nutsandbolts/op2.html
Note that although many people thinks that using it may be considered dangerous, they even compare to GOTO
, but it's not bad in some cases. You can use it, but not really often.