Java:子クラスは親クラスの属性値を書き換えることができますか?
1093 ワード
Java:子クラスは親クラスの属性値を書き換えることができますか?
まず、出力結果を推測できる例を見てみましょう.
上記コードの出力結果は次のとおりです.
不思議なことに、私たちは確かに2つのSubオブジェクトを作成しましたが、2番目の出力の結果はSuperです.これは、上記の例では非表示フィールドが定義されているためです.
上記の定義から、メンバーフィールドがメソッドのように書き換えられないことがわかります.サブクラスが同じ名前のフィールドを定義すると、サブクラスは新しいフィールドのみを宣言します.スーパークラスのフィールドは非表示です.書き換えられていないので、マルチステートアクセスはできません.
注:子クラスでは、親クラスのフィールドは単純な名前で参照できません.代わりに、このフィールドは親からアクセスする必要があります.一般的には、コードが読みにくいため、フィールドを非表示にすることはお勧めしません.
参照先: https://mp.weixin.qq.com/s/Ovqb_F2vABeYWrfKCGE4-g
まず、出力結果を推測できる例を見てみましょう.
1.
public class FatherClass {
String info="FatherClass";
}
2.
public class SonClass extends FatherClass{
String info="SonClass";
}
3.
public static void main(String[] args) {
FatherClass father=new FatherClass();
System.out.println(father.info);
SonClass son=new SonClass();
System.out.println(son.info);
FatherClass son2=new SonClass();
System.out.println(son2.info);
}
上記コードの出力結果は次のとおりです.
FatherClass
SonClass
FatherClass
不思議なことに、私たちは確かに2つのSubオブジェクトを作成しましたが、2番目の出力の結果はSuperです.これは、上記の例では非表示フィールドが定義されているためです.
, , 。
上記の定義から、メンバーフィールドがメソッドのように書き換えられないことがわかります.サブクラスが同じ名前のフィールドを定義すると、サブクラスは新しいフィールドのみを宣言します.スーパークラスのフィールドは非表示です.書き換えられていないので、マルチステートアクセスはできません.
注:子クラスでは、親クラスのフィールドは単純な名前で参照できません.代わりに、このフィールドは親からアクセスする必要があります.一般的には、コードが読みにくいため、フィールドを非表示にすることはお勧めしません.
参照先: