查找使用祖先类传递给方法的对象的实际Class

时间:2013-08-12 11:48:36

标签: java

如果我传递这样的对象:

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班级的孙子......那么在这种情况下我们如何知道carA4

依旧......

4 个答案:

答案 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);
}