对象引用的实际 class

Actual class of object reference

给定三个 classA、B 和 C,其中 B 是 A 的子class,C 是 B 的子class

(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 表示的对象 实际上是从 class B?

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

这个问题到底想表达什么?

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

您可以自己尝试一下:

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);
  }

}

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

所提供的示例非常清楚地解释了您的问题。

  • 超级class是子class的实例吗?否
  • 子class是超级class的实例吗?是

从题目中,你知道了A、B、C三者之间的关系
由于 o 的实际 class 是 B,您应该能够根据给定的信息回答这些问题。