实际的对象引用类

时间:2015-06-12 09:05:55

标签: java oop inheritance polymorphism instanceof

给定三个类A,B和C,其中B是A的子类,C是B的子类。

(a) (o instanceof B) && (!(o instanceof A))
(b) (o instanceof B) && (!(o instanceof C))
(c) !((o instanceof A) || (o instanceof B))
(d) (o instanceof B)
(e) (o instanceof B) && !((o instanceof A) || (o instanceof C))

问题:只有当reference o表示的对象实际已从B类实例化时,哪个选项才有效?

注意:我无法理解这个问题。即使该对象是从B实例化的,我们也可以从A,B或C类中实例化对象。

究竟试图陈述的问题是什么?

2 个答案:

答案 0 :(得分:0)

由于这显然是一项家庭作业,我不宜直接提供答案。相反,我已经为您编写了一个程序来演示问题的含义,运行它会提供答案。

你可以自己尝试一下:

public class Main {

  class A {}
  class B extends A {}
  class C extends B {}

  public static void main(String[] args) {
    new Main().experiment();
  }

  private void experiment() {
    Object o = new B();

    boolean a = (o instanceof B) && (!(o instanceof A));
    boolean b = (o instanceof B) && (!(o instanceof C));
    boolean c = !((o instanceof A) || (o instanceof B));
    boolean d = (o instanceof B);
    boolean e = (o instanceof B) && !((o instanceof A) || (o instanceof C));

    System.out.println("a = "+a);
    System.out.println("b = "+b);
    System.out.println("c = "+c);
    System.out.println("d = "+d);
    System.out.println("e = "+e);
  }

}

答案 1 :(得分:0)

如果您不了解instanceof,请阅读this

提供的示例非常清楚地解释了您的要求。

  • 超类是子类的实例吗?否
  • 子类是超类的实例吗?是

从问题中,你知道A,B,C之间的关系 由于o的实际课程是B,你应该能够用给定的信息回答这些问题。