C++에서는 모든 클래스 멤버 메서드가 가상이 아닙니다. 그렇게 하려면 키워드를 접두사로 사용해야 합니다. 가상 . 반면 Java에서는 기본적으로 모든 클래스 멤버 메서드가 가상입니다. 가상이 아닌 것으로 만들기 위해 키워드를 사용합니다. 결정적인 .
Java의 참조 변수는 기본적으로 객체의 주소를 16진수 형식으로 유지하는 변수이며 나중에 기본적으로 힙 메모리에 저장될 객체의 주소인 이진 시스템으로 변환됩니다.
기본 유형과 크기가 다른 참조 변수는 크기를 계산할 수 없습니다. Java에서 Parent 클래스의 참조 변수는 해당 개체 참조와 자식 개체 참조를 보유할 수 있습니다. 예제를 통해 메서드가 아닌 멤버에 대해 살펴보겠습니다.
예:
Java// Java Program to Demonstrate that Non-method Members // are Accessed according to Reference Type // (Unlike methods that are accessed according // to the referred object) // Class 1 // Super class class Parent { int value = 1000; // Constructor of super class Parent() { // Print statement System.out.println('Parent Constructor'); } } // Class 2 // Sub class class Child extends Parent { int value = 10; // Constructor of sub class Child() { // Print statement System.out.println('Child Constructor'); } } // Class 3 // Main class class GFG { // Main driver method public static void main(String[] args) { // Creating an object of sub class inside main() // method Child obj = new Child(); // Printing the reference of child type System.out.println('Reference of Child Type :' + obj.value); // Note that doing 'Parent par = new Child()' // would produce same result Parent par = obj; // Par holding obj will access the value // variable of parent class // Printing the reference of parent type System.out.println('Reference of Parent Type : ' + par.value); } }
산출
Parent Constructor Child Constructor Reference of Child Type :10 Reference of Parent Type : 1000
출력 설명: 상위 참조 변수가 하위 클래스의 참조를 보유하고 있고 상위 클래스와 하위 클래스 모두에 'value' 변수가 있는 경우 하위 클래스 객체 참조를 보유하고 있는지 여부에 관계없이 상위 클래스 'value' 변수를 참조합니다. 하위 클래스 객체 참조를 보유하는 참조는 하위 클래스의 멤버(함수 또는 변수)에 액세스할 수 없습니다. 이는 상위 참조 변수가 상위 클래스에 있는 필드에만 액세스할 수 있기 때문입니다. 따라서 참조 변수의 유형은 인스턴스화되는 객체의 유형이 아니라 호출될 '값'의 버전을 결정합니다. 이는 컴파일러가 메서드에만 특별한 런타임 다형성 메커니즘을 사용하기 때문입니다. (인스턴스화되는 객체 유형에 따라 호출할 메소드 버전이 결정됩니다.)
메모: 타입 캐스팅을 통해 부모 포인터를 사용하여 자식 데이터 멤버에 액세스하는 것이 가능해졌습니다.