java - 如何从基类实例中找出子类?

标签 java oop reflection inheritance

有没有办法从基类实例中找出派生类的名称?

例如:

class A{
    ....
}
class B extends A{
    ...
}
class c extends A{
    ...
}

现在如果一个方法返回一个A的对象,我能找出它是B还是C类型吗?

最佳答案

使用 instanceofClass#getClass()

A returned = getA();

if (returned instanceof B) { .. }
else if (returned instanceof C) { .. }

getClass() 将返回以下任一个:A.classB.classC.class

在 if 子句中你需要向下转型——即

((B) returned).doSomethingSpecificToB();

也就是说,有时人们认为使用 instanceofgetClass() 是一种不好的做法。你应该使用 polymorphism尽量避免检查具体子类的需要,但我不能用给定的信息告诉你更多信息。

关于java - 如何从基类实例中找出子类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2856122/

相关文章:

java - Selenium WebDriver 中隐式 Waits() 中的错误

java - 如何在 Eclipse 中添加自定义文件(为每个创建的项目构建)?

c++ - 链表反向函数 OOP C++

java - 如何让对象/类告诉我它来自哪个 jar 文件

java - 通过动态参数反射调用方法

Java 反射为 java pojo 设置值

java - 不带双引号的字符串追加

java - 无法将名称解析为 (n) 'type definition' 组件

php - Laravel 动态类的使用

c# - 如何向 Linq 表达式添加排序规则?