다형성 개념에 대해 혼란 스럽습니다. 아무도 나를 도울 수 없습니까? 여기다형성 이해하기가 어려움
class A {
int i=2;
void display() {
System.out.println("display method of A");
}
}
class B extends A {
int i=1;
void display() {
System.out.println("display method of B");
}
}
public class M {
public static void main(String[] arg) {
A a=new A();
System.out.println(a.i);
a.display();
a=new B();
System.out.println(a.i);
a.display();
}
}
O/p: 2 display method of A 2 display method of B
부 이해 단순 코드이다 참조 변수 'A'타입 'A'제를 선언하고는 'A'의 오브젝트를 참조. 프로그램이 'a.i'를 인쇄 할 때 A의 변수 'i'를 인쇄하고 display가 a.display()로 호출되면 클래스 A의 화면을 호출합니다. 그 미세한 여기
문제 부까지 : 이제 참조 변수 타입 B의 'A'객체 인쇄 a.i , 클래스 A에서 여전히 지문 '나'의 값을 할당 할 때 (즉 2). 그러나 디스플레이 함수를 a.display()로 호출하면 메소드 B의 표시를 호출합니다.
내 연구 : 참조 변수를 사용하여 멤버 변수에 액세스 할 때마다 액세스 할 때 참조 변수 유형이 검사됩니다. 레퍼런스 변수를 사용하는 메소드를 호출 할 때 객체 타입은 런타임에 평가됩니다 (이것은 다형성이라고 생각합니다). 객체 유형에 따라 특정 메소드가 호출됩니다.
맞습니까, 아니면 다른 개념이 관련되어 있습니까? 그리고 무엇이 다형성인지를 자세히 알고 싶습니다. 응용 프로그램입니다. OOP 및 Java의 기본 개념에 대한 책을 추천 해 주시면 큰 도움이됩니다.
이 문제로 인해 일반적으로 클래스 및 해당 하위 클래스의 비공개 필드에 동일한 식별자를 사용하지 않는 것이 좋습니다. –
그래, 슈퍼 클래스 변수가 private이 될 때까지 하위 클래스와 수퍼 클래스에서 같은 변수를 선언하는 용도는 없다는 것을 이해합니다. 하지만 인터넷에서 샘플 코드를 작성하여 동작을 테스트하면서 더 다형성을 이해하는 데 더 도움이되었습니다. –