Java访问修饰符
Java 用修饰符控制类、属性和方法的访问权限以及其他能力,通常写在语句最前面。例如:
修饰符分访问修饰符和非访问修饰符。本节只讲访问修饰符(也叫访问控制符):能管住类、成员变量、方法能被谁用的那几个关键字。面向对象里,它们就是用来保护类、变量、方法和构造方法的那道门。
一、四种访问权限
Java 支持四种访问权限:
| 修饰符 | 谁能访问 | 注意 |
|---|---|---|
| public | 任何其他类 | 跨包要 import;公有方法和变量会被子类继承;main 必须是 public |
| protected | 同包任意类 + 不同包的子类 | 不能修饰类和接口 |
| 默认(不写) | 同一个包内可见 | 接口里的变量隐式 public static final,方法默认 public |
| private | 只能被所属类访问 | 类和接口不能声明为 private;对外用 Getter / Setter |
二、public:公有的
声明为 public 的类、方法、构造方法和接口,能被任何其他类访问。几个 public 类若不在同一个包,需要导入对方所在的包。因为有继承,类的公有方法和变量都能被子类继承。
下面的方法用了公有访问控制:
Java 程序的 main() 必须是 public,否则解释器跑不起来。
三、protected:受保护的
声明为 protected 的变量、方法和构造方法:同一个包里谁都能用,不同包里只有子类能用。它不能修饰类和接口;方法和成员变量可以是 protected,接口的成员不行。
子类能访问父类的 protected 方法和变量,不相关的类就进不去。下面父类用了 protected,子类重写了 bark():
若把 bark() 改成 private,除了 Dog 谁都进不去;改成 public,所有类都能进。只想给子类看见,就用 protected。
四、private:私有的
private 最严:方法、变量、构造方法只能被所属类访问。类和接口不能声明为 private。私有变量对外只能走公共的 Getter / Setter,用来藏实现细节、保护数据。
name、age 是私有的,别的类不能直接读改。于是提供两对 public 方法:getName() / setName()、getAge() / setAge()。
this 是 Java 关键字,可先看站内《Java this关键字详解》。访问私有变量的方法习惯命名:变量名前加 get / set,并把首字母大写,也就是常说的 Getter 和 Setter。
五、默认:不写任何关键字
不写修饰符的属性和方法,对同一个包内的类可见。接口里的变量都隐式声明为 public static final,接口方法默认是 public。
六、继承时怎么收紧、放宽
还不熟继承的可以先跳过,或去看《Java继承和多态》。规则是:
-
父类 public 的方法,子类也必须是 public。 -
父类 protected 的方法,子类只能是 protected 或 public,不能改成 private。 -
父类默认修饰的方法,子类可以改成 private。 -
父类 private 的方法不能被继承。
想让类被所有人用,就声明为 public;只想给本包用,就省略修饰符。成员数据则按需要设成 public、protected,或者省略。
一句话总结:能给全世界的用 public,只给子类和同包的用 protected,只给同包的就什么都不写,藏起来的用 private,对外再开 Getter / Setter。
转载请注明来源:Java访问修饰符本文链接地址:https://ai.zhousir.top/?p=73








