[英]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.