Java 包作用域类中的函数作用域

Java 包作用域类中的函数作用域,java,Java,假设您有一个包范围的类: class MyClass { } 两者的区别是什么 class MyClass { public f() { ... } } 及 及 ? 既然类是包范围的,那么如何使函数公开或受保护执行或添加 我对包作用域类的推理: class MyClass { } 您不能从包外部使用该类,因为它是包作用域,因此public没有其他效果 按照同样的推理,protected没有额外的效果,因为您无论如何都必须留在包中 因此,只有private具有限制作用,因为其他3个

假设您有一个包范围的类:

class MyClass {
}
两者的区别是什么

class MyClass {
    public f() { ... }
}

?

既然类是包范围的,那么如何使函数
公开
受保护
执行或添加

我对包作用域类的推理:

class MyClass {
}
  • 您不能从包外部使用该类,因为它是包作用域,因此
    public
    没有其他效果
  • 按照同样的推理,
    protected
    没有额外的效果,因为您无论如何都必须留在包中
  • 因此,只有
    private
    具有限制作用,因为其他3个修饰符(package、
    public
    protected
    )都是相同的
这是正确的吗


当类的作用域是包时,我看不到修改之间的区别。

是。虽然public和protected在默认类中是冗余的,但是private对它们来说仍然有一定的意义

正如评论中指出的,在继承周期中,虽然不是直接的,但间接子类可以通过其他公共类访问,因此在某些情况下它们很方便

否则,您已经决定将整个类设置为包保护,显然内部级别的可访问性毫无意义


简而言之,就可访问性而言,您选择了上一级而不是下一级。

可能重复@TrầnAnhNam我理解修饰符之间的区别,但不理解类在包范围内时的区别。您的类是包作用域,但其子类可能不是。如果一个类是包作用域,您如何从该类生成不在该包中的子类?如果一个公共类
a
在同一个包中扩展了您的
MyClass
,如果另一个包中的类
B
扩展了
a
B
可以访问
MyClass
的公共受保护成员。感谢您的确认!
class MyClass {
    f() { ... }
}