有兩個方面的問題:
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); } }

忽然笑
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)
結束。
添加回答
舉報
0/150
提交
取消