【发布时间】:2017-05-22 05:10:33
【问题描述】:
如果我们考虑以下代码,应该会发生多态性,因为它在 java 的嵌套类中是允许的,但是,当调用 inner class 构造函数时,polymorphism 不适用,即 new Innner1() 适用于声明的类型实例
不在实际类型上。
public class Outer {
public class In {
public In() {
System.out.println("I am In");
}
}
public static void main(String[] args) {
Outer obj = new Outer2();
obj.new In();
Outer2 in2 = (Outer2) obj;
in2.new In();
}
}
class Outer2 extends Outer {
public class In extends Outer.In {
public In() {
System.out.println("I am In2");
}
}
}
能否帮助我理解这种行为。
各位,我已经更新了代码,编译正常,没有类转换异常
请检查下面的输出。
I am In
I am In
I am In2
【问题讨论】:
-
呃...你不能只将
Outer转换为Outer2...obj是Outer的实例,但不是Outer2的实例 -
代码编译得很好,出来了...
-
编译器不会告诉你
(Outer2) obj实际上并没有真正工作并且不会检查它。它只会在Runtime处导致ClassCastException,因为您的工作是对类型进行有效和检查的转换(例如使用instanceof)。 -
你期望什么输出?由于代码现在在类型转换方面是正确的,我会说一切都按预期工作,至少对我来说是这样。
-
没有多态性,正如我在问题中提到的那样..
标签: java polymorphism inner-classes