동적 메서드 바인딩 수퍼 클래스 참조는 상속되고 오버로드 된 하위 클래스 메서드 만 호출 할 수 있습니다. 그러나 그렇지 않으면 구현 될 수 있습니다. 여기슈퍼 클래스 개체가 상속되지 않은 하위 클래스 멤버 메서드를 참조 할 수 있습니까?
abstract class in
{
abstract void print();
}
class a extends in
{
String name=this.getClass().getSimpleName();
void show()
{
System.out.println("class "+name);
}
void print()
{
show();
}
}
class Main
{
public static void main(String args[])
{
in x;
x = new a();
x.print();
}
}
, 그것은 이로 슈퍼 클래스 이름 대신 서브 클래스의 이름을 반환
또한 getClass()가있는 슈퍼 클래스 객체를 참조
클래스 성공적으로 인쇄 주요 방법.
부모님은 자녀에 대해 알 수 없습니다. 클래스 개발자는 사용자가 클래스를 확장하는 방법을 알 수 없습니다. – duffymo
'in'은'print()'라는 메서드를 가져야한다는 것을 알고 있습니다. 이 메소드의 모든 구현은'a' 내부에서 일어나며,'a'에 대한 모든 것을 알고 있습니다 (클래스 이름과 다른 메소드까지). – khelwood
x.print()는 new a()와 같습니다. print()? 하지만 x가 수퍼 클래스 참조가 아닌가? – ZEU5