Java 对象引用的实际类
给定三个类A、B和C,其中B是A的子类,C是B的子类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) (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,请阅读 提供的示例非常清楚地解释了您的问题
- 超类是子类的实例吗?没有
- 子类是超类的实例吗?对
因为
o
的实际班级是B,你应该能够用给定的信息回答这些问题。你应该问给你作业的人。堆栈溢出不是为了帮助您理解任务。如果您遇到问题,我们可以帮助您解决问题,但要了解对您的期望,您应该与提出问题的人交谈。阅读:请至少先搜索答案这是java认证手册中的一个问题