Jos*_* D. 0 java inheritance inner-classes private-methods
我们来看下面的代码:
public class Test {
class A {
public A() {}
private void testMethod() {
System.out.println("A");
}
}
class B extends A {
public B() { super(); }
private void testMethod() {
System.out.println("B");
}
}
public Test() { }
public A get() {
return new B();
}
public static void main(String[] args) {
new Test().get().testMethod();
}
}
Run Code Online (Sandbox Code Playgroud)
我希望代码写B.A是写的.
可能会觉得奇怪(至少对我来说)一个类可以调用它包含的内部类的私有方法这一事实(为什么它们会这样做?),但我真正无法理解的是为什么多态不会工作.
我的意思是,如果从Test.main()我们可以称之为A.testMethod()显而易见,我们也称之为呼叫B.testMethod().Java还可以确定对象的动态类型,那么为什么Java调用声明类型的方法而不是动态类型的方法呢?可以检查此行为:
public static void main(String[] args) {
B b = new Test().new B();
A a = b;
b.testMethod(); // writes B
a.testMethod(); // writes A
}
Run Code Online (Sandbox Code Playgroud)
另外,为什么会发生这种只有在发生Test.A.testMethod()的private?
| 归档时间: |
|
| 查看次数: |
119 次 |
| 最近记录: |