对象引用的实际 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,您应该能够根据给定的信息回答这些问题。
给定三个 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,您应该能够根据给定的信息回答这些问题。