bhh*_*988 1 java inheritance subclass access-modifiers
假设我正在写一个包.我有以下继承层次结构,都在我的包中:
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;
}
}
Run Code Online (Sandbox Code Playgroud)
我想阻止其他人进行子类化Container.但我不能让它final因为Bucket和Bag是子类.我必须做到这一点public,否则外人不能打电话getContainer().有没有办法在Java中这样做?否则,人们在这种情况下做了什么?
要防止类被其他包中的类子类化,请使所有构造函数包为private.
如果该类没有任何构造函数,则它具有隐式默认构造函数,它是公共的,因此您需要显式创建一个package-private no-arg构造函数.
package foo;
public class Container {
Container () {/*package-private*/}
public void size() { System.out.println(10); }
}
Run Code Online (Sandbox Code Playgroud)
package foo;
public final class Bucket extends Container {}
Run Code Online (Sandbox Code Playgroud)
package bar;
public final class Oops extends Container {}
Run Code Online (Sandbox Code Playgroud)
编译错误:默认构造函数不显示隐式超级构造函数Container().必须定义一个显式构造函数
public final class Oops extends Container {
public Oops() {}
}
Run Code Online (Sandbox Code Playgroud)
编译错误:隐式超级构造函数Container()不可见.必须显式调用另一个构造函数
当然,没有其他构造函数,所以无法完成.
| 归档时间: |
|
| 查看次数: |
47 次 |
| 最近记录: |