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

Java 查找使用祖先类传递给方法的对象的实际类,java,Java,如果我传递这样的对象: class Car {} Audi extends Car {} do.something(Car car) { } Audi audi = new Audi(); do.something(audi); 我怎么知道那辆车是奥迪的 假设Car也不一定有任何特定的子类被传递,实际上可能只是一个通用的Car 如果我们有: A4 extends Audi {} 然后 A4将是汽车类的孙辈。。。那么在这种情况下,我们怎么知道汽车是A4的呢 等等 如果有必要,则使用运算符

如果我传递这样的对象:

class Car {}

Audi extends Car {}

do.something(Car car) { }

Audi audi = new Audi();
do.something(audi);
我怎么知道那辆车是奥迪的

假设Car也不一定有任何特定的子类被传递,实际上可能只是一个通用的Car

如果我们有:

A4 extends Audi {}
然后

A4将是汽车类的孙辈。。。那么在这种情况下,我们怎么知道汽车是A4的呢


等等

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

if(car instanceof Audi)

顺便说一句,instanceof应作为最后手段使用,请阅读以下内容以了解更多信息:

如果有必要,请使用operator

if(car instanceof Audi)
顺便说一句,instanceof应该作为最后的手段使用,请阅读本文以了解更多信息:

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

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

你可以

if(car instanceof Audi)

你可以

if(car instanceof Audi)


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

public void something(Car car){
    String carName = car.getClass.getSimpleName();
    System.out.println("CarName: " + carName);
}

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

public void something(Car car){
    String carName = car.getClass.getSimpleName();
    System.out.println("CarName: " + carName);
}

这是糟糕设计的标志;你不需要知道。我只在我的日志代码中使用它。。。通过这种方式,我可以向log方法传递一点也不描述类的名称,但是log在编写日志时仍然可以使用这些信息。在程序的其余部分保持我的代码更干净。好吧,我没想到。。。我的日志代码使用getStackTrace。。不是物体。。我必须重新思考我的整个问题:这是糟糕设计的标志;你不需要知道。我只在我的日志代码中使用它。。。通过这种方式,我可以向log方法传递一点也不描述类的名称,但是log在编写日志时仍然可以使用这些信息。在程序的其余部分保持我的代码更干净。好吧,我没想到。。。我的日志代码使用getStackTrace。。不是物体。。我必须重新思考我的整个问题:它不应该是instanceOf,而是instanceOf。希望你不要mind@PrasadKharkar在你发表评论之前,我已经编辑过了,无论如何,谢谢-当我看到时,它是大写的O,没有问题:instanceof不是选项,因为它可以是任何子类。。。这只是一个例子。。。但例如。。。比如说有一辆宝马或者其他什么的。。。还有50种其他类型的车……不应该是instanceOf,而是instanceOf。希望你不要mind@PrasadKharkar在你发表评论之前,我已经编辑过了,无论如何,谢谢-当我看到时,它是大写的O,没有问题:instanceof不是选项,因为它可以是任何子类。。。这只是一个例子。。。但例如。。。比如说有一辆宝马或者其他什么的。。。还有50辆其他类型的车。。。