簡體   English   中英

覆蓋繼承的變量名

[英]Override inherited variable name

我想知道從超級 class 擴展時是否可以覆蓋變量的名稱(不是值)。

想象一下這個場景:

public class Base {
   public  String A;
   public  String doSomething() { print(A) ; }
}

public class Sub1 extends Base {
   public String A1;
   public void setA1(String A1) { this.A1 = A1; }
}

public class Sub2 extends Base {
   public String A2;
}

Sub1 s = new Sub1();
s.setA1("1")
s.doSomething() // print "1"

我很好奇,我是否可以通過某種方式使變量 A 與變量 A1 和 A2 相同,只是為了使我的子類中的代碼更具可讀性。

是的,您可以僅“覆蓋” Base字段A 這樣, Sub1Sub2類將擁有A自己的A字段名稱(但它將是另一個具有不同(與Base值不同)值的字段)。

public class Base {
   public  String A;
   public  String doSomething() { print(A) ; }
}
public class Sub1 extends Base {
   public String A;
   public void setA(String A) { this.A = A; }
}
public class Sub2 extends Base {
   public String A;
}

Sub1 s = new Sub1();
s.setA("1")
s.doSomething() // print "null", because original field has not been changed

或者,您可以只重用Sub1Sub2類中的A字段:

public class Base {
   public  String A;
   public  String doSomething() { print(A) ; }
}
public class Sub1 extends Base {
   // removed: public String A1;
   public void setA(String A) { this.A = A; }
}
public class Sub2 extends Base {
   // removed: public String A2;
}

Sub1 s = new Sub1();
s.setA("1")
s.doSomething() // print "1"

天哪,這已經晚了 5 年,但答案如下:

public class Base {
   public  String A;
   public  String doSomething() { print(A) ; }
}
public class Sub1 extends Base {
   
    public String getA1() {
        return super.getA();
    }
   public void setA1(String A1) { this.setA(A1); }
}

從上面,我們可以在不創建變量A1的情況下聲明A1 ,該變量覆蓋A但仍然使用A 你可以這樣做僅僅是因為 java 如何使用封裝在 java 中序列化和反序列化它的變量

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM