Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 对象引用的实际类_Java_Oop_Inheritance_Polymorphism_Instanceof - Fatal编程技术网

Java 对象引用的实际类

Java 对象引用的实际类,java,oop,inheritance,polymorphism,instanceof,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) ||

给定三个类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))
问题:只有当引用o表示的对象实际上已从类B中实例化时,哪个选项才是正确的

注:我无法理解这个问题。即使对象是从B实例化的,我们也可以从任何类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,请阅读

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

  • 超类是子类的实例吗?没有
  • 子类是超类的实例吗?对
从这个问题中,您知道A、B、C之间的关系。

因为
o
的实际班级是B,你应该能够用给定的信息回答这些问题。

你应该问给你作业的人。堆栈溢出不是为了帮助您理解任务。如果您遇到问题,我们可以帮助您解决问题,但要了解对您的期望,您应该与提出问题的人交谈。阅读:请至少先搜索答案这是java认证手册中的一个问题