1

如果我传递这样的对象:

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

等等...

4

4 回答 4

4

如果有必要,则使用instanceof运算符

if(car instanceof Audi)

顺便说一句,instanceof 应该作为最后的手段,阅读此以获得更多信息:http ://www.javapractices.com/topic/TopicAction.do?Id=31

于 2013-08-12T11:50:57.033 回答
1

您始终可以使用instanceof运算符来确定传递给您的方法的对象的实际类是什么。但正如评论中所指出的,依赖继承层次结构来构建过于复杂的内部逻辑是一种糟糕的 OO 设计。

于 2013-08-12T11:51:55.487 回答
1

你可以有

if(car instanceof Audi)

或者

if(car.getClass().getSimpleName().equals(Audi.class.getSimpleName())
于 2013-08-12T11:53:48.017 回答
1

您可以通过反射获取类的名称。

public void something(Car car){
    String carName = car.getClass.getSimpleName();
    System.out.println("CarName: " + carName);
}
于 2013-08-12T11:55:51.317 回答