>  기사  >  Java  >  Java에서 다형성을 구현하는 방법

Java에서 다형성을 구현하는 방법

尚
원래의
2019-12-04 11:48:053665검색

Java에서 다형성을 구현하는 방법

Java 다형성 개요: (권장: java 비디오 튜토리얼)

다형성은 객체 지향 프로그래밍 언어의 중요한 기능입니다. 이를 통해 기본 클래스의 포인터나 참조가 파생 클래스의 객체를 가리킬 수 있습니다. 클래스에 구체적으로 액세스하는 동안 메서드의 동적 바인딩을 구현합니다. Java의 메소드 호출 동적 바인딩 구현은 주로 메소드 테이블에 의존하지만 클래스 참조 호출(invokevitual)과 인터페이스 참조 호출(invokeinterface)을 통한 구현은 다릅니다.

Java에서 다형성을 구현하려면 세 가지 조건이 필요합니다.

1. 상속 관계가 있어야 합니다.

2. 체계적으로 다시 작성해야 합니다.

3. 하위 클래스 객체를 가리키는 상위 클래스의 참조가 있어야 합니다.

클래스 참조 호출의 일반적인 프로세스는 다음과 같습니다. Java 컴파일러는 Java 소스 코드를 클래스 파일로 컴파일합니다. 컴파일 프로세스 중에 호출된 기호 참조는 정적 유형에 따라 클래스 파일에 기록됩니다.

실행 중에 JVM은 클래스 파일에 따라 호출 메서드의 기호 참조를 찾은 다음 정적 유형의 메서드 테이블에서 오프셋을 찾은 다음 이 포인터를 기반으로 객체의 실제 유형을 결정합니다. 실제 타입의 메소드 테이블과 오프셋 정적 타입의 메소드 테이블의 오프셋과 마찬가지로 실제 타입의 메소드 테이블에서 해당 메소드가 발견되면 직접 호출되는 것으로 간주된다. 상위 클래스는 재정의되지 않았습니다. 상속관계에 따라 아래에서 위로 검색합니다.

Java에서 다형성을 구현하는 방법

위 그림에서 볼 수 있듯이 프로그램 실행 시 특정 클래스가 필요할 때 클래스 로딩 서브시스템은 해당 클래스 파일을 JVM에 로드하고 내부적으로 클래스의 유형 정보를 설정합니다( 유형 정보는 실제로 JVM의 클래스 파일에 저장된 데이터 구조입니다. 여기에는 메소드 코드, 클래스 변수, 멤버 변수 및 이 블로그 게시물에서 중점적으로 다룰 메소드 테이블을 포함하여 Java 클래스에 의해 정의된 모든 정보가 포함되어 있습니다. 이 유형 정보는 메소드 영역에 저장됩니다.

이 메소드 영역의 유형 정보는 힙에 저장된 클래스 객체와 다릅니다. 메소드 영역에서는 이 클래스의 타입 정보가 고유한 인스턴스만 가지며(즉, 각 스레드가 공유하는 메모리 영역임) 힙에는 이 클래스의 개체가 여러 개 있을 수 있습니다. 메소드 영역의 유형 정보는 힙의 클래스 객체를 통해 액세스할 수 있습니다. Java 리플렉션 메커니즘과 마찬가지로 클래스 객체를 통해 클래스의 모든 정보에 액세스할 수 있습니다.

더 많은 Java 지식을 알고 싶다면 java 기본 튜토리얼 칼럼을 주목해주세요.

위 내용은 Java에서 다형성을 구현하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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