繁体   English   中英

Java:如何创建可以在包内进行子类化的公共类,同时防止外部人继承?

[英]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因为BucketBag是子类。 而且我必须将其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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM