1 作用
主要用于控制类, 属性, 方法的访问
2 种类
- public
- protected
- 什么都不加(默认, 有的地方写作 default)
- private
3 修饰的地方
属性 | 方法 | 外部类 | 内部类 | |
---|---|---|---|---|
public | Y | Y | Y | Y |
protected | Y | Y | N | Y |
什么都不加 | Y | Y | Y | Y |
private | Y | Y | N | Y |
从中可知: 4 个修饰符都能修饰: 属性, 方法, 内部类。
但是修饰外部类的只有 public
和 什么都不加
4 可被访问的范围
类的内部调用 | 子类内部调用 | 调用类 (和父类同包) 直接调用 | 调用类 (和父类不同包) 直接调用 | 调用类通过其子类间接调用 (和父类同包) | 调用类通过其子类间接调用 (和父类不同包) | |
---|---|---|---|---|---|---|
public | Y | Y | Y | Y | Y | Y |
protected | Y | Y | Y | N | Y | N |
什么都不加 | Y | Y/N(特殊说明) | Y | N | Y/N(特殊说明) | N |
private | Y | N | N | N | N | N |
上面的几种情况说明一下:
- 类的内部调用: 类内部的方法互相调用
- 子类内部调用: 子类调用父类的方法
- 调用类直接调用: 类 A 调用 类 B 的方法
- 调用类通过其子类间接调用: 类 A 是父类, 有方法 fn, 类 B 是 类 A 的子类, 类 C 调用 类 B 的 fn 方法
什么都不加(默认)
子类内部调用
: 当子类和父类不在同一个包下, 无法调用, 但是在同一个包下, 能调用调用类通过其子类间接调用(和父类同包)
: 调用类, 子类, 父类, 都在同一个包路径下, 能够执行成功, 其他的情况, 都会失败
5 总结
public 强调的是共有的, 所以在所有的地方都能调用
protected 强调的是同一个包和子类, 所以可以在
- 类内部调用
- 子类内部调用
- 同一包下, 调用类调用, 即使是隔着子类间接的调用都可以, 只要 调用类和父类维持在统一包路径下
什么都不加 (default) 强调的是同一个包, 所以可以在
- 类内部调用
- 子类和父类在同一个包下, 子类能调用
- 子类, 父类, 调用类都在同一个包下, 调用类可以通过子类间接调用到
private 强调的是私有的, 所以只能在类的内部调用
6 补充
- 我们声明接口时, 接口方法 没有修饰符, 默认是
public
- 4个修饰符的控制访问 private < 什么都不加 < protected < public, 在重写父类的方法的时候, 修饰符必须大于父类的修饰符