【问题标题】:Why can't a class be protected while it can have a default modifier in javajava - 为什么在java中可以具有默认修饰符的类不能受到保护
【发布时间】:2013-12-17 11:16:52
【问题描述】:

虽然在修饰符的继承关系中默认修饰符的可见性低于受保护的,但为什么一个类可以设为默认但不能设为受保护。

【问题讨论】:

  • 你是说顶级班?
  • 完全可以创建一个类protected。你能更清楚地解释你认为你做不到的地方是什么吗?
  • 这里说的类是包级别的类。

标签: java default protected modifiers


【解决方案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 就出现了。这就是为什么我们不能将继承上下文之外的任何东西作为保护对象。!

    【讨论】:

    • 我指的是无法保护的包级别的类。很抱歉造成混乱。
    猜你喜欢
    • 2018-05-04
    • 2013-08-09
    • 1970-01-01
    • 2013-04-03
    • 2014-05-09
    • 2023-04-09
    • 2013-08-24
    • 1970-01-01
    相关资源
    最近更新 更多