다형성은 참조 변수가 어느 클래스 인스턴스 객체를 가리키는지, 참조 변수가 발행한 메소드 호출이 어느 클래스에서 구현되는지를 나타냅니다. 프로그램 실행 중에 결정되어야 합니다. (추천 학습: javacourse)
특정 클래스는 프로그램이 실행될 때 결정되므로 참조할 수 있습니다. 소스 프로그램을 수정하지 않고 만든 것 code 변수는 다양한 클래스 구현에 바인딩되어 참조에 의해 호출되는 특정 메서드가 그에 따라 변경됩니다. 즉, 프로그램 실행 시 프로그램에 바인딩된 특정 코드는 프로그램 코드를 수정하지 않고도 변경될 수 있으므로 프로그램이 여러 항목을 선택할 수 있습니다. 실행 상태. 이것은 다형성입니다.
Features:
자식 클래스를 가리키는 상위 클래스 참조가 위쪽으로 변환되어 소유한 메서드와 속성에만 액세스할 수 있습니다. 및 하위 클래스에는 있지만 상위 클래스에는 없는 메서드의 경우 메서드가 오버로드되더라도 이 참조를 사용할 수 없습니다.
하위 클래스가 상위 클래스의 일부 메서드를 재정의하는 경우 이러한 메서드를 호출할 때 하위 클래스에 정의된 메서드를 사용해야 합니다(동적 연결, 동적 호출).
Java에는 다형성을 달성하기 위한 세 가지 필수 조건이 있습니다. 바로 상속, 재작성, 상향 변환입니다.
우선순위 메소드 호출, 우선순위는 this.show(O), super.show(O), this.show((super)O), super.show (( 슈퍼) 오).
다형성의 구현 원리
Java에서 객체 메소드의 호출은 클래스 정보의 메소드 테이블에 의존하여 구현됩니다.
일반적으로 객체의 메소드가 호출되면 JVM은 객체 클래스의 메소드 테이블을 조회하여 메소드의 직접 참조 주소를 확인한 후 실제로 해당 메소드를 호출합니다. 주소.
슈퍼 클래스는 상위 클래스의 메서드를 상속합니다. 메서드가 재정의되지 않으면 호출은 상위 클래스의 메서드를 가리킵니다. 메서드를 재정의하면 클래스의 코드 영역을 가리킵니다.
하지만 슈퍼 클래스에는 상위 클래스의 메소드 테이블이 있습니다.
우리는 Java 프로그램이 실행될 때 클래스 관련 정보가 메소드 영역에 배치된다는 것을 알고 있습니다. 이 정보 중에는 정의된 모든 메소드를 포함하는 메소드 테이블이라는 영역이 있습니다. 유형별 메소드에 대한 정보 및 해당 메소드의 실제 코드에 대한 포인터입니다.
위 내용은 Java는 다형성을 어떻게 구현합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!