>Java >Java베이스 >자바의 다형성 원리는 무엇입니까?

자바의 다형성 원리는 무엇입니까?

王林
王林원래의
2020-01-02 10:12:204771검색

자바의 다형성 원리는 무엇입니까?

다형성이란 무엇인가요?

Polymorphism은 참조 변수가 어떤 클래스 인스턴스 객체를 가리키는지 나타냅니다. 참조 변수에서 실행되는 메서드 호출은 프로그램에서 실행되어야 합니다. 기간 내에 결정될 수 있습니다.

특정 클래스는 프로그램이 실행될 때 결정되기 때문에, 이렇게 하면 소스 프로그램 코드를 수정하지 않고도 참조 변수를 다양한 클래스 구현에 바인딩할 수 있어 참조 호출의 구체성이 확보됩니다. 그에 따라 메서드가 변경됩니다. 즉, 프로그램이 실행될 때 프로그램에 바인딩된 특정 코드를 프로그램 코드를 수정하지 않고도 변경할 수 있으므로 프로그램이 여러 실행 상태를 선택할 수 있습니다.

(무료 온라인 학습 동영상 튜토리얼 공유: java 온라인 학습 )

특징:

상향 변환으로 인해 하위 클래스를 가리키는 상위 클래스 참조는 상위 클래스가 소유한 메서드 및 속성에만 액세스할 수 있습니다. 그러나 상위 클래스가 아닌 하위 클래스에 존재하는 메서드에는 해당 참조를 사용할 수 없습니다. . , 이 메서드가 오버로드됨에도 불구하고.

하위 클래스가 상위 클래스의 일부 메서드를 재정의하는 경우 이러한 메서드를 호출할 때 하위 클래스에 정의된 메서드를 사용해야 합니다(동적 연결, 동적 호출).

Java에는 다형성을 달성하기 위한 세 가지 필수 조건이 있습니다. 바로 상속, 재작성, 상향 변환입니다.

우선순위 메소드 호출, 우선순위는 this.show(O), super.show(O), this.show((super)O), super.show (( 슈퍼) 오).

다형성의 구현 원리

Java에서 객체 메소드의 호출은 클래스 정보의 메소드 테이블에 의존하여 구현됩니다.

일반적으로 객체의 메소드가 호출되면 JVM은 객체 클래스의 메소드 테이블을 조회하여 메소드의 직접 참조 주소를 확인한 후 실제로 해당 메소드를 호출합니다. 주소.

슈퍼 클래스는 상위 클래스의 메서드를 상속합니다. 메서드가 재정의되지 않으면 호출은 상위 클래스의 메서드를 가리킵니다. 이 메소드를 Overrding하면 클래스의 코드 영역을 가리키지만, 슈퍼 클래스는 상위 클래스의 메소드 테이블을 가지게 됩니다.

우리는 Java 프로그램이 실행될 때 클래스 관련 정보가 메소드 영역에 배치된다는 것을 알고 있습니다. 이 정보 중에는 메소드 테이블이라는 영역이 있습니다. 이러한 메소드의 실제 코드에 대한 유형 및 포인터입니다.

그림과 같이:

자바의 다형성 원리는 무엇입니까?

4개의 클래스가 Bird, Cock, Parrot 및 CrazyParrot일 때 JVM(Java Virtual Machine)의 메소드 영역 이후에 메소드 영역에는 이 네 가지 클래스의 정보가 포함됩니다. 다음 그림은 각 클래스의 메소드 테이블의 예를 보여줍니다.

자바의 다형성 원리는 무엇입니까?

그림에서 Cock, Parrot, CrazyParrot의 클래스 정보 메소드 테이블에는 Bird에서 상속받은 메소드가 포함되어 있음을 알 수 있습니다. CrazyParrot의 메소드 테이블에는 Parrot에서 상속된 메소드가 포함되어 있습니다. 또한 각 클래스에는 고유한 메서드도 있습니다.

메서드 테이블 항목이 가리키는 특정 메소드 코드 영역에 주목하세요. 다형성 Overriding 메소드인 courtship()의 경우 Cock, Parrot, CrazyParrot의 메소드 테이블에서 courtship() 항목의 위치는 Bird 메소드 테이블에서 상속받은 부분에 속하지만 다른 메소드 코드 영역을 가리킨다.

관련 기사 튜토리얼 공유: java 언어 소개

위 내용은 자바의 다형성 원리는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.