为什么Java中没有子类可见性修饰符?
在不止一次的情况下,我发现自己希望获得Java中无法实现的可变可见性。我希望某些成员在他们自己的班级和任何子班级中可见,但对于包的其余部分或世界其他地方不可见。换句话说,我想要这样:
Modifier Class Package Subclass Worldsub-class Y N Y N
但是,Java的设计师只给了我这个:
Modifier Class Package Subclass Worldpublic Y Y Y Y
protected Y Y Y N
no modifier Y Y N N
private Y N N N
我想要这样的典型情况是在创建抽象类时。有时我发现抽象的父母需要访问某些成员,但是具体的孩子也需要访问。我可以通过成为成员来给他们这种访问权限protected
,但这在我真的不想要的时候打开了对包其余部分的访问权限。
为了完全清楚,我知道这样的修改是 不是
可以在Java中。我的问题是为什么Java中不包含这样的修饰符?在我看来,这比protected
默认值或默认值更自然。仅仅是因为它的原因不够重要,还是与我未曾考虑过的可能的副作用更相关?
回答:
我想他们希望通过具有非线性访问层次结构来避免增加的复杂性。
您应该控制您的包,因此不要在其中调用这些受保护的方法。
(顺便说一下,protected
与并不太相同sub-class and
package,因为不能在声明类的任意对象上调用非静态受保护的方法(如果不在同一包中),而只能在代码所在的子类的对象上调用(您可以在上看到它Object.clone()
,只能由正在克隆其对象的类调用。)
以上是 为什么Java中没有子类可见性修饰符? 的全部内容, 来源链接: utcz.com/qa/398683.html