亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何僅更改 Java 派生類中的靜態字段

如何僅更改 Java 派生類中的靜態字段

HUWWW 2021-12-10 09:57:57
我有以下情況:class A {    static int a, aa;    A(int x, int y) {        a = x;        aa = y;    }}class B extends A {    B() {        super(2, 3);    }}class C extends A {    C() {        super(3, 4);    }}class Test {    public static void main(String[] args) {        B b = new B();        C c = new C();    }}當然,現在B.a是 3 ,現在B.aa是 4。我應該如何改變B,并C讓a和aa保持不變,仍從繼承A,但可以有一組值B和另一組C?
查看完整描述

3 回答

?
LEATH

TA貢獻1936條經驗 獲得超7個贊

您在帖子“繼承”中提到的詞僅在您創建實例變量而不是靜態變量時適用。

因此,您需要做的第一件事是將靜態變量更改為實例變量。這是您可以創建 B 和 C 類的不同實例并擁有它們自己的值副本的唯一方法。

就像你寫的,

“保持靜態,仍然繼承自A”

這完全是矛盾的。只要它們保持靜態,它們就永遠不能被繼承。


查看完整回答
反對 回復 2021-12-10
?
鳳凰求蠱

TA貢獻1825條經驗 獲得超4個贊

簡短的回答是你不能。通過聲明它們,static您基本上是在說“我只想要每個 JVM 這個變量的一個實例”(或者更準確地說:每個類加載器一個),從而刪除到這個對象實例的任何鏈接。


查看完整回答
反對 回復 2021-12-10
?
FFIVE

TA貢獻1797條經驗 獲得超6個贊

調用 super(3,4) 或 super(2,3) 是不可能的,因為你在這些類中沒有那個構造函數。


如果你調用 super ,你會為那個類的變量設置值。像 super(2,3) 將為 A 設置值,現在對于 B 類,您可以對字段進行任何操作。 總的來說,我不確定這個問題是否有效。 這是可以做得很好的事情似乎沒有用:


public class A {


 static int a, aa;

 A(){

     System.out.println("aa");

 }

    A(int i,int j) {


        this.a = i;

        this.aa = j;


    }

}


class B extends A {


    B(int i,int j) {

        super(i, j);

        this.a=i+1;

        this.aa=j+1;

        System.out.println("in b="+a+" "+aa);

    }

}

公共類測試 { 公共靜態無效主(字符串 [] args){


        A a = new A(1,2);

         B b = new B(2,3);


    }

}


查看完整回答
反對 回復 2021-12-10
  • 3 回答
  • 0 關注
  • 207 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號