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

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

繼承的類的靜態成員變量是自身的時候為啥不爆StackOverflowError

繼承的類的靜態成員變量是自身的時候為啥不爆StackOverflowError

蝴蝶不菲 2018-12-07 03:09:20
有兩個方面的問題: 1,當一個類B繼承一個類C,而類B的一個實例又是類C的一個靜態成員變量的時候,為什么不會報StackOverflowError,我知道類B的一個實例是類C的一個非靜態成員變量的時候會報這個錯誤。雖然靜態的只有一個實例,但引用還是是無限循環的??? ? 2.當一個類B繼承一個類C、一個接口A,類C中和接口A中都有一個相同的成員變量b的時候,分別因該怎么引用?(其中類C中的b是static的) ? 可能沒有說的太清楚,我把代碼貼出來了,求解答,困惑我很久了。。 public class InterfaceVariable { public static void main(String[] args) { B b = new B("class B"); // System.out.println(b); // System.out.println(b.b); // System.out.println(B.b.b); } } interface A{ B b = new B("interface A"); } class C{ static B b = new B("class C"); } class B extends C implements A{ public B(String s){ System.out.println("class B's constractor,s="+s); } } ? ? ?
查看完整描述

3 回答

?
撒科打諢

TA貢獻1934條經驗 獲得超2個贊

你想調用接口A的變量b嗎?以下是代碼:

package headfirst.command.simpleremote;

public class InterfaceVariable {
    public static void main(String[] args) {
        B b = new B("class B");
        // System.out.println(b);
        // System.out.println(b.b);
        // System.out.println(B.b.b);
    }
}

interface A {
    B b = new B("interface A");
}

class C {
    static B b = new B("class C");
}

class B extends C implements A {
    public B(String s) {
        System.out.println("class B's constractor,s=" + s);
        System.out.println("interface A'b= " + A.b);
    }
}
查看完整回答
反對 回復 2018-12-16
?
忽然笑

TA貢獻1806條經驗 獲得超5個贊

public B(String s){
        super();  //默認調用的
        System.out.println("class B's constractor,s="+s);
創建B的對象會調用C的構造方法
調用C的構造方法之前先要加載C ,創建靜態對象B
創建對象B 又調用C的構造方法,靜態對象創建一次就可以了
所以,C構造方法,B構造方法(靜態對象B)然后C構造方法,B構造方法(main函數B)
結束。


查看完整回答
反對 回復 2018-12-16
?
慕婉清6462132

TA貢獻1804條經驗 獲得超2個贊

索噶,明白了,多謝,

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

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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