[英]Why is this code resulting in StackOverflow error:
C类实现2个接口A和B。我只想打印类值以验证Multiple Interface实现,相反,我遇到了StackOverflow错误。
interface A {
void test();
}
interface B {
void test();
}
class C implements A, B {
A a = new C();
B b = new C();
@Override
public void test() {
System.out.println(a.getClass());
System.out.println(b.getClass());
}
}
public class MultiInherit{
public static void main(String args[]){
C c = new C();
c.test();
}
}
当您从main创建C
的实例时
C c = new C();
它必须初始化类C
的成员变量-在这里它们是A a
和B b
。
要初始化它们,请创建C
的实例。 转到1 。
当您初始化C c = new C();
它实例化了它的实例变量,并且您已经声明为
A a = new C();
B b = new C();
在这里,您可以看到它将再次构造C,并且n将再次找到a
和b
并将实例化为C()
。 它将导致stackOverflow
这是因为每次创建“ C”时,最终都会创建两个C
,然后将创建四个C
,依此类推。
您可以改为这样做,
interface A {
void test();
}
interface B {
void test();
}
class C implements A, B {
A a ;
B b ;
@Override
public void test() {
System.out.println(a.getClass());
System.out.println(b.getClass());
}
public void createObjects(){
a = new C();
b = new C();
}
}
然后调用测试方法,
public class MultiInherit{
public static void main(String args[]){
C c = new C();
c.createObjects();
c.test();
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.