logo

Klasy nadrzędne i podrzędne posiadające tego samego członka danych w Javie

W C++ wszystkie metody składowe klasy są niewirtualne. Aby to zrobić, musimy użyć słowa kluczowego jako przedrostka, znanego jako faktyczny . Podczas gdy w Javie wszystkie metody składowe klasy są domyślnie wirtualne. Aby uczynić je niewirtualnymi, używamy słowa kluczowego finał .

Zmienne referencyjne w Javie to w zasadzie zmienne przechowujące adres obiektu w formacie szesnastkowym, który później jest konwertowany do systemu binarnego, który w zasadzie jest adresem obiektu, który ma być przechowywany w pamięci sterty.

Nie można obliczyć zmiennych referencyjnych różniących się od typów pierwotnych rozmiarem. W Javie zmienna referencyjna klasy Parent może przechowywać zarówno referencje do obiektu, jak i referencje do obiektu podrzędnego. Przyjrzyjmy się członom niebędącym metodą na przykładzie.



Przykład:

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);  } } 

Wyjście
Parent Constructor Child Constructor Reference of Child Type :10 Reference of Parent Type : 1000

Wyjaśnienie wyjścia: Jeśli nadrzędna zmienna referencyjna przechowuje odwołanie do klasy podrzędnej, a zmienna „wartość” znajduje się zarówno w klasie nadrzędnej, jak i podrzędnej, będzie ona odnosić się do zmiennej „wartość” klasy nadrzędnej, niezależnie od tego, czy zawiera ona odniesienie do obiektu klasy podrzędnej. Odwołanie przechowujące odwołanie do obiektu klasy podrzędnej nie będzie mogło uzyskać dostępu do elementów (funkcji lub zmiennych) klasy podrzędnej. Dzieje się tak, ponieważ nadrzędna zmienna referencyjna może uzyskać dostęp tylko do pól znajdujących się w klasie nadrzędnej. Zatem typ zmiennej referencyjnej decyduje, która wersja „wartości” zostanie wywołana, a nie typ tworzonego obiektu. Dzieje się tak dlatego, że kompilator używa specjalnego mechanizmu polimorfizmu w czasie wykonywania tylko dla metod. (Tam typ tworzonego obiektu decyduje, która wersja metody ma zostać wywołana).

Notatka: Dostęp do podrzędnych elementów danych można uzyskać za pomocą wskaźnika nadrzędnego z rzutowaniem typów.