private仅限本类访问;default同包可访问;protected同包及跨包子类可访问;public任何地方均可访问。

区分这四个访问权限,关键看“谁能在哪儿访问它”。不用死记,抓住两个维度:是否同包、是否子类,就能快速判断。
private:只认自己家的门
仅限定义它的那个类内部使用。哪怕同包的其他类、或者子类(不管同包不同包),都完全看不到它。
常见用途:把字段设为 private,再配 public 的 getter/setter,实现封装。
default(不写修饰符):只认同一个包
没有写任何修饰符时,默认就是这个级别。同一包下的所有类都能访问,但跨包就彻底不可见——哪怕你是子类也不行。
适合用在包内协作的工具类、辅助方法,不希望被外部包随意调用。
protected:同包 + 跨包子类
两部分都可访问:一是当前包里的所有类;二是其他包中继承了该类的子类(注意:子类对象能访问,但其他非子类的跨包类不能)。
典型场景:父类留出给子类扩展的方法,比如模板方法模式中的钩子方法。
public:开门迎客,谁来都行
没有任何限制。只要类能被加载(在 classpath 中),任何地方的任何类都能访问。
适用于对外暴露的 API、主入口类、通用工具方法等。










