Java - Referenzvariablen

8
  

"Es ist wichtig das zu verstehen   es ist die Art der Referenzvariablen -   nicht die Art des Objekts, auf das es sich bezieht   zu - das bestimmt, was Mitglieder können   zugegriffen werden. "

Was meinst du genau mit dieser Aussage? Ist dies auf das Konzept der Vererbung beschränkt? Wie behandelt JVM das?

    
Javascript is GOD 23.03.2010, 14:13
quelle

6 Antworten

26

Es bedeutet, dass Sie Folgendes haben:

%Vor%

Der Typ der -Variablen ist Object , aber der Typ des Objekts, auf das verwiesen wird, ist String . Es ist der Variablentyp, der bestimmt, was Sie tun können - Sie können also nicht

anrufen %Vor%

Der Compiler weiß nur, dass Sie eine Methode für Object aufrufen, die toUpperCase nicht enthält. In ähnlicher Weise werden überladene Methoden nur gegen diejenigen aufgelöst, die Sie kennen:

%Vor%     
Jon Skeet 23.03.2010, 14:16
quelle
5

Zum Beispiel:

%Vor%

Im obigen Beispiel wird angenommen, dass ein Fahrrad nicht die Methode shiftUp hat. Die Zeile b2.shiftGearUp() würde nicht kompiliert, da die JVM nur weiß, dass b2 ein Bike ist und nicht MountainBike .

Du könntest es zum Laufen bringen, indem du es auf einen Mountainbike-Typ verwandelst:

%Vor%     
jjnguy 23.03.2010 14:17
quelle
2

In Java kann sich eine Referenz des Typs base auf ein Objekt der Klasse child beziehen. Mit einem solchen Verweis können wir jedoch nur auf die Mitglieder der Klasse base zugreifen, die an die Klasse child vererbt wurden, und nicht auf die Mitglieder, die die Klasse child hinzugefügt haben könnte.

    
codaddict 23.03.2010 14:16
quelle
1

Wenn Sie eine Klasse Foo mit einem öffentlichen Feld foo und eine Klasse Bar extends Foo mit einem öffentlichen Feld bar ...

haben
  • Mit Foo myRef = new Bar(); können Sie nur auf myRef.foo zugreifen, obwohl das Objekt tatsächlich ein Bar ist.
  • Bar myRef = new Bar(); erlaubt den Zugriff auf myRef.foo und myRef.bar . Weil die Referenz als Bar deklariert ist.
Xr. 23.03.2010 14:17
quelle
0
  

"Es ist wichtig das zu verstehen   ist die Art der Bezugsgröße -   nicht die Art des Objekts, auf das es sich bezieht   zu - das bestimmt, was Mitglieder können   zugegriffen werden. "

Das bedeutet, dass der Compiler die Klasse der Referenzvariable auf das Vorhandensein von Methoden und anderen Membern überprüft, zum Beispiel, dass Sie eine Dog -Unterklasse haben, die Animal baseclass erweitert,

%Vor%

Hier prüft der Compiler, ob die makeSound () - Methode in der Animal-Klasse deklariert ist oder nicht, damit sie kompiliert werden kann.

    
Zaki 23.03.2010 14:34
quelle
-1
%Vor%     
Chris Cudmore 23.03.2010 14:16
quelle

Tags und Links