2016-10-21 13 views
0

私は本当に相続に関して基本的なことを誤解しています。 私は親クラスがあります。Javaの親子で期待通りに動作しません

public class Parent { 
    String s = "Parent"; 
    Parent() {} 
    String getS() { 
     return this.s; 
    } 
} 

と子クラス:

public class Child extends Parent { 
    String s = "Child"; 
    Child() { } 
} 

主のようです:

Parent parent = new Parent(); 
Child child = new Child(); 
Log.e(TAG, "parent:" + parent.getS()); 
Log.e(TAG, "child:" + child.getS()); 

私はparent.getS()を返すように "親" とchild.getS()を返すことを期待します」子 "が返されますが、どちらも"親 "です。方法の接頭辞は、このように呼び出されたときにメソッドのthisを決定しませんか?

は、親クラスからあなたのgetS()メソッドは子クラス に継承され、したがって、それは子オブジェクトのために利用可能である スティーブ・S.

答えて

1
  • ありがとうございます。
  • オーバーライドはメソッドのみであり、インスタンス変数ではありません。
  • ですから、同じ名前で新しい変数を定義した場合でも、それは
+0

ああであなたの子供-コンストラクタの最初の呼び出しとしてこのコンストラクタを呼び出すと...ありがとう。 –

+0

詳細はこちら:http://stackoverflow.com/questions/772663/having-2-variables-with-the-same-name-in-a-class-that-extends-another-class-in-j – MordechayS

0

を上書きされないように、それが有効になりませんあなたは "取得するために、子クラスで)すなわち(GETS getterメソッドを作成する必要がありますあなたのメインメソッドでchild.getS()を呼び出すと、 "Child"が返されます。このようにして、Parentクラスから継承したgetS()メソッドをオーバーライドします。

0

あなたが(それは、もちろん、またpublicすることができる)、子クラスの親部分にs -memberを設定しますprotectedコンストラクタを提供することです方法:

protected Parent(String s) { this.s = s; }

これは、文字列を指定された値に設定します。その後、

super("Whatever you want");

関連する問題