[英]Understanding unusual behaviour with Java's cyclic inheritance
考慮以下兩個A
和B
類(java),它們具有各種程序包注意事項:
public class A extends B {
public static class C {}
}
-------------
public class B extends A.C {
public B() {}
}
返回涉及A的循環繼承錯誤
package P1;
import P2.B;
public class A extends B {
public static class C {}
}
--------------
package P2;
import P1.A.C;
public class B extends C {
public B() {}
}
編譯沒有錯誤。 但是,如果我將類B中的import語句更改為import P1.A
,然后將類定義更改為public class B extends AC
,則會public class B extends AC
再次顯示循環錯誤。
是什么解釋了這種行為?
在第一個示例中,有一個A的循環。如果A
擴展了B
並且B
擴展了C
,由於C
是A
的一個內部類,因此引用它的唯一方法是調用AC
,因此java在A
上將其識別為一個循環:
A-->B-->AC
( -->
=擴展)。
在第二個示例中, 刪除了循環。 通過A
導入C
, B
不再需要擴展AC
,而只需擴展C
:
A-->B-->C
因此,將B放在單獨的程序包中可以直接導入C,而不必通過 A調用它。
在示例3(僅導入P1.A
)中,我們仍然必須將C
稱為AC
,因此循環返回的原因。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.