은의 다음 코드를 보자 : 그 코드가 B
를 작성하는 기대상속을
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();
}
}
. 대신 A
이 기록됩니다.
클래스가 포함하고있는 내부 클래스의 private 메서드를 호출 할 수 있다는 것이 이상하게 느껴질 수 있습니다 (왜 그런 식으로 만들었습니까?). 그러나 실제로 이해할 수없는 것은 무엇입니까? 왜 다형성이 작동하지 않습니다.
Test.main()
에서 전화 할 경우 A.testMethod()
이라고 부를 수 있습니다. 전화 번호는 B.testMethod()
입니다. Java는 또한 객체의 동적 유형을 결정할 수 있습니다. 왜 Java가 동적 유형 중 하나 대신 선언 된 유형의 메소드를 호출합니까? 이 문제는 확인할 수 있습니다 : Test.A.testMethod()
는 private
경우에만
public static void main(String[] args) {
B b = new Test().new B();
A a = b;
b.testMethod(); // writes B
a.testMethod(); // writes A
}
또한, 왜 이런 일이 무엇입니까?