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中可以具有默认修饰符的类不能受到保护的主要内容,如果未能解决你的问题,请参考以下文章

java 访问修饰符

为啥 Java 反射 API 允许我们访问私有和受保护的字段和方法?这不会破坏访问修饰符的目的吗? [复制]

JAVA中访问修饰符的作用

Java中各种(类方法属性)访问修饰符与修饰符的说明

java修饰符的一些知识点

面试题解五 访问修饰符的区别