我可以在不使用'default'的情况下将继承限制为包吗?

Flo*_*ian 7 java inheritance

我有一些类,我需要能够在同一个包中扩展.但我不希望我的包之外的任何人扩展我的课程.其他包中的类需要能够调用我的类,所以我不能使用'default'.

有没有办法(可能通过界面)我能做到这一点?

Pet*_*rey 7

如果使构造函数包为local,则只能在同一个包中进行扩展,但如果是公共类,则可以在任何类中访问公共成员.

  • 这是一个很好的解决方案,因为它还允许基类在包外部可见. (2认同)

hig*_*ted 6

我通过创建一个具有default可见性的基类来实现这一点,然后使用public final外部类可以调用但不扩展的类来扩展它.例如:

class MyBase {
    public void doSomething() { ... }
}

public final class PublicBase extends MyBase { }

class ExtendedBase {
    @Override
    public void doSomething() { ... }
}
Run Code Online (Sandbox Code Playgroud)