[英]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
這樣, Sub1
和Sub2
類將擁有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
或者,您可以只重用Sub1
和Sub2
類中的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.