[英]Java Inheriting a public class with Package Private Constructor
[英]Java: How to create a public class that can be subclassed within package, while preventing outsiders from inheriting?
假設我正在寫一個包。 我的包中包含以下繼承層次結構:
public class Container {
public void size() {
System.out.println(10);
}
}
public final class Bucket extends Container {}
public final class Bag extends Container {}
public class Item {
Container container; // is aware of what container it's in. Will be initialized on construction.
public Container getContainer() {
return container;
}
}
我想防止其他人將Container
子類化。 但我不能讓它final
因為Bucket
和Bag
是子類。 而且我必須將其public
,否則外界無法調用getContainer()
。 有沒有辦法用Java做到這一點? 否則,人們在這種情況下會做什么?
為了防止某個類被其他包中的類子類化,請使所有構造函數使用package-private 。
如果該類沒有任何構造函數,則它具有隱式默認構造函數 ,它是public,因此您需要顯式創建一個包私有的無參數構造函數。
package foo;
public class Container {
Container () {/*package-private*/}
public void size() { System.out.println(10); }
}
package foo;
public final class Bucket extends Container {}
package bar;
public final class Oops extends Container {}
編譯錯誤:對於默認構造函數,隱式超級構造函數Container()不可見。 必須定義一個顯式構造函數
public final class Oops extends Container {
public Oops() {}
}
編譯錯誤:隱式超級構造函數Container()不可見。 必須顯式調用另一個構造函數
當然,沒有其他構造函數,因此無法完成。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.