부모 클래스 생성자를 호출하는 것은 사실이지만 부모 클래스 객체가 전혀 생성되지 않고 단지 부모 클래스 생성자를 호출하여 속성을 초기화하는 것뿐입니다.
부모 클래스 생성자를 호출하는 것이 부모 클래스 객체를 만드는 것과 같다고 하면 정말 말도 안 되는 소리입니다.
새 명령어는 객체 등의 다양한 속성 참조를 저장하는 데 사용되는 공간을 엽니다. 바이트코드를 디컴파일하면 새 명령어가 하나만 있으므로 공간이 열리고 객체 하나가 그 안에 배치됩니다. 각 공간.
그러면 하위 클래스가 상위 클래스의 속성, 메서드 등을 호출하면 인스턴스화된 객체가 아닙니다.
바이트코드에서 하위 클래스는 CONSTANT_Class_info 유형에 속하는 u2 유형의 상위 클래스 인덱스를 갖게 되며, CONSTANT_Class_info 설명을 통해 CONSTANT_Utf8_info를 찾은 다음 지정된 상위 클래스를 찾을 수 있습니다.
귀하의 방법에서는 속성 이름이 이에 대해 구문 분석된 다음 실제 변수 내용이 new가 생성한 공간에 저장됩니다. . .
super 키워드는 이 공간의 특정 부분(즉, 상위 클래스 데이터를 저장하는 전용 메모리 부분)의 데이터에만 액세스합니다. . . . . .
하위 클래스를 부모 클래스로 강제 변환하여 사용할 수 있는 이유는 자바 가상 머신이 정적 유형(외형 유형)과 실제 유형의 개념을 갖고 있기 때문입니다.
예를 들어 Object t=new Point(2,3);
그러면 Object는 정적 유형(외형 유형)에 속하고 Point는 실제 유형에 속합니다.
정적 유형과 실제 유형 모두 프로그램에서 변경될 수 있습니다. 차이점은 정적 유형의 변경은 이를 사용할 때만 발생하는 반면 변수 자체의 정적 유형은 변경되지 않으며 최종 정적 유형은 컴파일 중에 알려집니다. 실제 변수 유형의 변경 결과는 런타임 중에만 결정될 수 있습니다. 컴파일러는 컴파일할 때 변수의 실제 유형이 무엇인지 알 수 없습니다. 속합니다. 클래스가 가상 머신에 로드될 때 이 클래스에 의해 생성된 개체의 레이아웃이 이미 결정되었다고 말할 수도 있습니다.
객체 본문에는 주로 Java 객체 자체의 인스턴스 필드와 상위 클래스에서 상속된 인스턴스 필드가 저장되며 내부 레이아웃은 다음 규칙을 충족합니다.
규칙 1: 모든 객체는 8바이트 단위로 정렬됩니다. 규칙 2: 인스턴스 필드는 long 및 double 유형, 정수 및 부동 소수점 유형, 문자 및 짧은 정수 유형, 마지막으로 참조 유형에 따라 정렬됩니다. 이러한 인스턴스 필드는 해당 단위에 따라 정렬됩니다.
규칙 3: 서로 다른 클래스 상속 관계의 인스턴스 필드는 혼합될 수 없습니다. 먼저 상위 클래스의 인스턴스 필드가 규칙 2에 따라 처리되고 그 다음에는 하위 클래스의 인스턴스 필드가 처리됩니다.
인스턴스화 방법
위는 Java 객체의 메모리 레이아웃에 대한 규칙입니다.
다음으로 일반적인메소드인 Java 객체의 인스턴스화 메소드에 대해 이야기하겠습니다.
새 객체를 생성하면 실제로 jvm은 객체의 전체 공간을 할당하고 전체 객체의 인스턴스 도메인 레이아웃이 결정됩니다.
예를 들어 설명하겠습니다.
class Parent {
private int age;
}
class Sub extend Parent{
private String name;
private int age;
private float Price;
하위 개체의 현재 메모리 레이아웃은 다음과 같습니다.
소위 상위 클래스 저장 공간 표현이라는 슈퍼의 의미는 무엇입니까?
여기 슈퍼스토리지는 그린이 아닐까 싶어요!
위 내용은 Java 상속에서 상위 클래스 객체 생성 문제에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!