2017-12-10 3 views
1
public class HelloWorld 
{ 
    protected int num = 12; 

    public void callme() 
    { 
    System.out.print(this.num); 
    } 

    public static void main(String[] args) 
    { 
    HelloWorld myObject1 = new HelloWorld(); 
    myObject1.callme(); 
    OtherClass myObject2 = new OtherClass(); 
    myObject2.callme(); 
    } 
} 


public class OtherClass extends HelloWorld 
{ 
    protected int num = 14; 
} 

Warum ist der Ausgang "1212" anstelle von "1214"? In php ist es "1214" aber nicht umgekehrt in Java. Was ist die Logik dahinter?Eigenschaft mit dem gleichen Namen in der Kindklasse Java

+2

Was hat das mit PHP zu tun? Warum das PHP-Tag? –

+1

Mögliches Duplikat von https://stackoverflow.com/questions/12589274/slight-confusion-regarding-overriding-where-variables-are-conerned – vinS

+0

@Schwesi Das hat nichts mit Pass-by-Referenz vs Pass-by-by- Wert. Hier geht es um das Verstecken von Feldern. –

Antwort

3

callme() Die Methode ist nur in der Basisklasse definiert. Daher gibt return this.num; die Instanzvariable der Basisklasse zurück.

Es gibt kein Überschreiben von Instanzvariablen in Java.

Wenn Sie diese Methode in der Unterklasse außer Kraft setzen würde, durch

public void callme() 
{ 
    System.out.print(this.num); 
} 

zu OtherClass Hinzufügen myObject2.callme(); wird 14 zurückgeben, da es callme() Methode der Unterklasse ausgeführt wird, und somit der Zugriff auf Unterklasseninstanzvariable.

Verwandte Themen