day04supplemet-Love

关于类的访问权限和修饰符问题

如果类名是默认包权限,那里面写的方法呢?

里面是public-method呢,其他地方的包应该不可以使用吧?因为没有写public的类只能在本包访问对吧?

类的访问权限决定内部成员的 “可见基础”类的访问权限决定内部成员的 “可见基础”

Java 中类的访问权限只有**两种:public 和 **默认(无修饰符)

如果类是默认权限(如 class Demo {},没有public):
这个类只能在当前包内被访问(其他包根本 “看不到” 这个类)。
因此,哪怕你在类里写了 public void test() {},其他包的类也无法使用这个方法 —— 因为连Demo类都找不到,更别提调用它的方法了。

只有public(如 public class Demo {})才能被其他包通过import访问,其内部的public成员才具备 “被跨包使用” 的基础。

四种访问修饰符

假如文件名Demo,然后有public Demo这个,我在这个类体内写了pubic的方法,这个是不是可以到处使用(无聊在哪个包),但是private只允许类使用和类的实例使用对吧?然后protected是包及子包可以使用?

  1. public:完全公开

  2. private:仅类内部可见,被private修饰的方法 / 属性,只能在当前类的内部直接使用,其他任何类(包括同包的类、子类)都无法访问,即使是该类的 “实例” 也不能在类外部调用其private成员。

  3. protected:同包 + 跨包子类可见

    同包中的任何类:可以直接访问protected成员(无论是否是子类);

    跨包中的子类:可以通过 “子类的实例” 访问父类的protected成员(不能通过父类的实例直接访问)。

跨包的子类?(存疑不了解)

核心结论(跨包子类访问protected的规则)

只有两种合法方式,一句话总结:“只能在子类内部用,不能在外部直接调”

  1. 子类内部直接用:子类(包 B 的Child)的方法里,可以直接调用父类的protected方法(如useParentMethod()里调用protectedMethod())。
  2. 外部通过子类间接用:其他类(如Test)只能调用子类提供的public方法(如useParentMethod()),间接触发父类protected方法的执行;但不能直接通过父类 / 子类实例调用protectedMethod()

protected的核心是:仅允许子类 “自己内部用”,不允许外部通过任何实例(父类 / 子类实例)直接调用;但可以通过子类暴露的public方法间接使用。
😘

posted @ 2025-08-30 21:07  Billmu  阅读(1)  评论(0)    收藏  举报