有两个方面的问题:
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
提交
取消