C类实现了2个接口A和B.我只是想打印类值来验证多接口实现,而不是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();
}
}
答案 0 :(得分:3)
答案 1 :(得分:1)
从main
创建C
的实例时
C c = new C();
它必须初始化类C
的成员变量 - 这里它们是A a
和B b
。
要初始化它们,请创建C
的实例。转到 1 。
答案 2 :(得分:1)
当你初始化C c = new C();
时,它正在实例化它的实例变量并且你声明为
A a = new C();
B b = new C();
在这里你可以看到它将再次构建C并再次n再次找到a
和b
并将实例化为C()
。它会导致stackOverflow
答案 3 :(得分:0)
因为每当你创建一个'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();
}
}