java - 为啥在java中可以具有默认修饰符的类不能受到保护
Posted
技术标签:
【中文标题】java - 为啥在java中可以具有默认修饰符的类不能受到保护【英文标题】:Why can't a class be protected while it can have a default modifier in javajava - 为什么在java中可以具有默认修饰符的类不能受到保护 【发布时间】:2013-12-17 11:16:52 【问题描述】:虽然在修饰符的继承关系中默认修饰符的可见性低于受保护的,但为什么一个类可以设为默认但不能设为受保护。
【问题讨论】:
你是说***班? 完全可以创建一个类protected
。你能更清楚地解释你认为你做不到的地方是什么吗?
这里说的类是包级别的类。
【参考方案1】:
为什么一个类可以设为默认但不能设为受保护?
一个更明智的问题是,为什么 Java 容忍除了公共***类之外的任何东西?
允许包私有***类的规定已经是对 Java 最早版本的修改,改进并被 嵌套 类取代,如果你愿意,可以是 protected
。
【讨论】:
关于包的私人历史:programmers.stackexchange.com/a/220109/47845 - 这可能就是你所指的! 这比我调查的历史还要深刻 :) 另一个掘金:Java 1.0 允许private protected
在 C 中的含义为 protected
。【参考方案2】:
我希望你的意思是***类(只能是公共的或默认的)。否则内部类可以有任何修饰符。
当我们说受保护时,它意味着它可以从包含受保护实体的类的所有子类中访问(可以是一个类)。
如果最外面的类是受保护的,那么它定义了受保护修饰符的定义。
【讨论】:
【参考方案3】:如果您有protected
内部或嵌套类,则允许从相同包或外部类的子类或类似的东西内部进行访问。
如果您有一个受保护的***类,则没有外部类可以让子类从中获取访问权限,因此受保护是没有意义的。
来自Ex. 的示例虽然对嵌套类型进行保护是有效的:
public class Foo
protected static class Bar
这允许Foo
的子类访问Bar
。
【讨论】:
受保护的***类有一点:它的子类可以是公共的并且可以正常使用。【参考方案4】:类可以被保护! i,e 内部类可以被保护。
class A
protected class C
当我们谈论继承(扩展)时,Protedted 就出现了。这就是为什么我们不能将继承上下文之外的任何东西作为保护对象。!
【讨论】:
我指的是无法保护的包级别的类。很抱歉造成混乱。以上是关于java - 为啥在java中可以具有默认修饰符的类不能受到保护的主要内容,如果未能解决你的问题,请参考以下文章