簡體   English   中英

通過Java的循環繼承了解異常行為

[英]Understanding unusual behaviour with Java's cyclic inheritance

考慮以下兩個AB類(java),它們具有各種程序包注意事項:

默認包中的兩個類

public class A extends B {

  public static class C {}

}

-------------
public class B extends A.C {

  public B() {}

}

返回涉及A的循環繼承錯誤

稱為P1的程序包中的A類,稱為P2的程序包中的B類

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 ,由於CA的一個內部類,因此引用它的唯一方法是調用AC ,因此java在A上將其識別為一個循環:

A-->B-->AC--> =擴展)。

在第二個示例中, 刪除了循環。 通過A導入CB不再需要擴展AC ,而只需擴展C

A-->B-->C

因此,將B放在單獨的程序包中可以直接導入C,而不必通過 A調用它。

在示例3(僅導入P1.A )中,我們仍然必須將C稱為AC ,因此循環返回的原因。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM