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

出力が「1214」ではなく「1212」になるのはなぜですか? PHPでは "1214"ですが、javaではその逆ではありません。その背後にある論理は何ですか?子クラスのJavaで同じ名前のプロパティ

+2

これはPHPと何が関係がありますか?なぜPHPタグですか? –

+1

可能な複製https://stackoverflow.com/questions/12589274/slight-confusion-regarding-overriding-where-variables-are-concerned – vinS

+0

@Schwesiこれは、参照渡しとは関係がありません。値。これはフィールドの隠蔽です。 –

答えて

3

callme()メソッドは基本クラスでのみ定義されているため、return this.num;は基本クラスのインスタンス変数を返します。

Javaではインスタンス変数のオーバーライドはありません。

あなたはOtherClass

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

を追加することにより、サブクラスでそのメソッドをオーバーライドしたい場合は、myObject2.callme();は、それがサブクラスのcallme()メソッドを実行するために、14を返しますので、アクセスしますサブクラスのインスタンス変数。

関連する問題