Wenn Sie die Konstruktormethode einer Unterklasse verwenden, um ein Objekt der Unterklasse zu erstellen, wird nicht nur den in der Unterklasse deklarierten Mitgliedsvariablen Speicher zugewiesen, sondern auch den Mitgliedsvariablen der übergeordneten Klasse wird Speicherplatz zugewiesen, jedoch nur der von ihnen geerbte Teil Unterklassen werden zugewiesen. Mitgliedsvariablen dienen als Variablen, die Unterklassenobjekten zugewiesen sind.
Das heißt, obwohl den privaten Mitgliedsvariablen in der übergeordneten Klasse Speicherplatz zugewiesen ist, werden sie nicht in ähnlicher Weise als Variablen des Unterklassenobjekts verwendet, wenn sich die Unterklasse und die übergeordnete Klasse nicht im selben Paket befinden Mitgliedsvariablen der übergeordneten Klasse verfügen über zugewiesenen Speicherplatz, jedoch nicht als Variable eines Unterklassenobjekts.
An diesem Punkt haben wir mehr oder weniger das Gefühl, dass etwas Speicher verschwendet zu werden scheint, wenn die Unterklasse das Objekt erstellt. Dies liegt daran, dass beim Erstellen eines Objekts mit einer Unterklasse den Mitgliedsvariablen der übergeordneten Klasse ebenfalls Speicherplatz zugewiesen wird, jedoch nur ein Teil davon als Variablen verwendet wird, die dem Unterklassenobjekt zugewiesen sind. Beispiel: Obwohl den privaten Mitgliedsvariablen in der übergeordneten Klasse Speicherplatz zugewiesen ist, werden sie nicht als Variablen des Unterklassenobjekts verwendet. Natürlich handelt es sich nicht um Variablen eines Objekts der übergeordneten Klasse, da wir das übergeordnete Objekt nicht verwenden Klasse, um überhaupt beliebige Objekte zu erstellen. Wir sollten jedoch beachten, dass es in der Unterklasse noch einige Methoden gibt, die von der übergeordneten Klasse geerbt werden, diese Methoden jedoch mit diesen nicht geerbten Variablen arbeiten können.
Beispiel: Das Objekt der Unterklasse ChinaPeople ruft die geerbte Methode auf, um Variablen zu bedienen, die nicht von der Unterklasse geerbt werden, denen aber Speicherplatz zugewiesen ist.
classPeople{privateintaverHeight=168;publicintgetAverHeight(){returnaverHeight;}}classChinaPeopleextendsPeople{intheight;publicvoidsetHeight(inth){//height=h+averHeight;//Illegal, die Unterklasse erbt averHeightheight=h;}publicintgetHeight(){returnheight ; }}publicclassMainpublicstaticvoidmain(Stringargs[]){ChinaPeoplezhangSan=newChinaPeople();System.out.println(der vom Unterklassenobjekt nicht geerbte Wert von AverageHeight ist: +zhangSan.getAverHeight());zhangSan.setHeight(180);System .out .println(Der Wert der Instanzvariablenhöhe des Unterklassenobjekts ist: +zhangSan.getHeight());}}
Die Laufergebnisse sind wie folgt:
Der Wert von AverageHeight, der nicht vom Unterklassenobjekt geerbt wird, ist: 168. Der Wert der Instanzvariablenhöhe des Unterklassenobjekts ist: 180.