如果我传递这样的对象:
class Car {}
Audi extends Car {}
do.something(Car car) { }
Audi audi = new Audi();
do.something(audi);
我怎样才能发现这辆车是Audi
?
假设Car
也不一定有任何传递的特定子类,实际上可能只是一个通用的Car
。
如果我们有以下内容:
A4 extends Audi {}
然后
A4 a4 = new a4();
do.something(a4);
A4
将成为Car
班级的孙子......那么在这种情况下我们如何知道car
是A4
?
依旧......
答案 0 :(得分:4)
如果有必要,请使用instanceof运算符
if(car instanceof Audi)
Btw instanceof应作为最后的手段使用,请阅读以获取更多信息:http://www.javapractices.com/topic/TopicAction.do?Id=31
答案 1 :(得分:1)
您始终可以使用instanceof
运算符来确定传递给方法的对象的实际类。但正如评论中指出的那样,依靠继承层次结构构建过于复杂的内部逻辑是一个糟糕的OO设计。
答案 2 :(得分:1)
你可以
if(car instanceof Audi)
或
if(car.getClass().getSimpleName().equals(Audi.class.getSimpleName())
答案 3 :(得分:1)
您可以通过反射获得课程的名称。
public void something(Car car){
String carName = car.getClass.getSimpleName();
System.out.println("CarName: " + carName);
}