访问随机分配的对象

时间:2015-03-30 18:51:31

标签: java inheritance reference subclass superclass

鉴于以下内容:

class ClassA

class ClassA1 extends ClassA
class ClassA2 extends ClassA
class ClassA3 extends ClassA

ClassA1 a1 = new ClassA1()
ClassA2 a2 = new ClassA2()
ClassA3 a3 = new ClassA3()

ClassA a = either a1, a2, or a3 (programmed to be randomly chosen by JVM)

如果对子类对象('a1','a2'或'a3')的引用仅在运行时分配给超类引用变量'a',那么如何编写实现的'if'语句:如果'a'引用a1,访问a1的指定字段(不是从a继承)?对此有任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:1)

使用instanceof运算符和强制转换。

if (a instanceof ClassA1) {
    ((ClassA1) a).someMethodThatsOnlyInA1();
}

答案 1 :(得分:0)

或者您可以使用instanceof运算符。

if(a instanceof ClassA1) { ... }

或者您可以使用Class<>的isAssignableFrom方法类型。

if(ClassA1.class.isAssignableFrom(a.getClass())) { ... }

两种方式似乎都是一样的,但是使用instancof你应该在编译时知道类型,使用isAssignableFrom可以在运行时动态检查类型,例如:

 if(a1.getClass().isAssignableFrom(a2.getClass())) { ... }

无法使用instanceof运算符编写最后一个示例。

虽然知道NullPointerExceptions,因为getClass()是一个方法!