为什么可以';在java中,类可以有一个默认修饰符,但它不能被保护

为什么可以';在java中,类可以有一个默认修饰符,但它不能被保护,java,default,protected,modifiers,Java,Default,Protected,Modifiers,虽然默认修饰符的可见性低于继承修饰符中的受保护修饰符,但为什么一个类可以设置为默认而不是受保护的。我希望您指的是顶级类(只能是公共类或默认类)。否则,内部类可以有任何修饰符 当我们说protected时,它意味着它可以从包含受保护实体(可以是类)的类的所有子类访问 如果最外层的类是受保护的,那么它定义了受保护修饰符的定义。如果您有一个受保护的内部或嵌套类,那么允许从外部类的相同包或子类或类似的内部进行访问 如果您有一个受保护的顶级类,那么就没有一个外部类可以让子类访问,所以受保护是没有意义的 其

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

我希望您指的是顶级类(只能是公共类或默认类)。否则,内部类可以有任何修饰符

当我们说protected时,它意味着它可以从包含受保护实体(可以是类)的类的所有子类访问


如果最外层的类是受保护的,那么它定义了受保护修饰符的定义。

如果您有一个
受保护的内部或嵌套类,那么允许从外部类的相同包或子类或类似的内部进行访问

如果您有一个受保护的顶级类,那么就没有一个外部类可以让子类访问,所以受保护是没有意义的

其中的示例对要保护的嵌套类型有效,但:

public class Foo {
    protected static class Bar{}
}
这允许
Foo
的子类访问
Bar

为什么一个类可以被设置为默认类,但不能被设置为受保护类

一个更合理的问题是,为什么Java不支持公共顶级类


允许包私有顶级类的规定已经是对Java最早版本的一种攻击,经过改进并被嵌套类取代,嵌套类可以
保护

类可以保护!。i、 e内部类可以被保护

class A{
protected class C{
}
}

当我们谈论继承(扩展)时,Protedted就出现了。这就是为什么我们不能将继承上下文之外的任何内容作为受保护的对象

你是说顶级类?完全可以使类
受保护。你能更清楚地解释一下你想在你认为不可能的地方去做什么吗?我这里说的类是包级别的类。受保护的顶级类有一个要点:它的子类可以是公共的,也可以正常使用。关于包私有历史:-这可能就是你所指的!这比我所调查的还要深刻:)另一个金块:Java 1.0允许
私有保护
,在C中的意思是
受保护
。我指的是包级别的类不能被保护。很抱歉给你带来了困惑。