首先了解概念:
在java中有四种权限修饰符:范围从大到小分别是:public、protect、default(friendly)、private,它们之间的区别是:
- public: Java语言中访问限制最宽的修饰符,一般称之为“公共的”。被其修饰的类、属性以及方法不仅可以跨类访问,而且允许跨包(package)访问。
- protect: 介于public 和 private 之间的一种访问修饰符,一般称之为“保护形”。被其修饰的类、属性以及方法只能被类本身的方法及子类访问,即使子类在不同的包中也可以访问。
- default: 这个访问权限可能是很多人容易所忽视的,即不写任何关键字。默认权限(同包权限)即:包内可访问,包外不可访问,不管是子类还是没有继承关系的类。
- private: 只能在当前类中使用,外部不能访问。
理解:什么是同包与不同包?
这很好理解啊,假如把包看成文件夹,包里面的东西就是文件,在同一个文件夹里面文件的就是同包,看代码:
1 package a: 2 //function1声明在a包中 3 public class function1{ 4 //声明的变量与方法; 5 } 6 package b; 7 //function2声明在b包中 8 public claass function2{ 9 //声明的变量与方法; 10 }
首先说同包,先看一个表(打勾的表示可以访问):
作用域 | 当前类 | 子孙类 | 外部类 |
public | √ | √ | √ |
protected | √ | √ | × |
Default(friendly) | √ | √ | √ |
private | √ | × | × |
结论:在同一个包的前提下,在继承时,子类只能继承父类中的public、protected以及default访问权限的成员变量或方法,并且继承之后,这些成员变量或方法的访问权限和之前的一样,如父类中是public,继承后还是public。
在不同包的情况下,看表:
作用域 | 当前类 | 子孙类 | 外部类 |
public | √ | √ | √ |
protected | √ | √ | × |
Default(friendly) | √ | × | × |
private | √ | × | × |
结论:在不同包的前提下,在继承时,子类只继承父类中的public和protected访问权限的成员变量或方法作为子类自己的成员变量或方法。