gpt4 book ai didi

java - 为什么 Java 中没有子类可见性修饰符?

转载 作者:IT老高 更新时间:2023-10-28 13:51:45 27 4
gpt4 key购买 nike

在不止一次的情况下,我发现自己想要一种在 Java 中无法实现的变量可见性。我希望某些成员在他们自己的类和任何子类中可见,但对包的其他部分或世界其他部分不可见。换句话说,我想要这个:

Modifier        Class     Package   Subclass  World
sub-class Y N Y N

然而Java的设计者只给了我this :

Modifier        Class     Package   Subclass  World
public 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 方法。

(顺便说一下,protected子类和包不太一样,因为非静态保护方法(如果不在同一个包中)可以' 不能在声明类的任意对象上调用,而只能在代码所在的子类的对象上调用。(您可以在 Object.clone() 上看到这一点,它只能由正在克隆其对象的类。))

关于java - 为什么 Java 中没有子类可见性修饰符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5300163/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com