第六章 访问权限控制
这一章都是在说public、protected、friendly(即默认)、private的区别
1.首先,区分修饰词修饰类和成员的差别
(1)类只能要么被public修饰,要么啥都没有即默认(包访问权限);(这一条不包括内部类)
(2)类的成员可以被public、protected、private修饰还可以默认;
2.权限范围public > protected > friendly > private
解释为何protected > friendly: 因为protected = 包访问权限 + 子类访问 ;friendly = 包访问权限;
举例:A包中类A1继承自B包中类B1,类A1可以访问B1类中被protected修饰的成员但不可访问默认即friendly成员,但是B1类中protected与friendly修饰成员在包B内都可被访问
3.权限表:
网上看了很多人写的博客说默认修饰符即(friendly或default),其子类不可访问基类friendly成员,笔者亲自试了试,发现:子类可以得到基类friendly成员,不过子类要与基类在同一个包中。到不是说别人说的是错的,只是描述不准确。因为子类和基类的成员应该用“得到”描述,而不应该用访问描述。继承是子类得到基类成员而不是访问。因为“得到”有拥有的意思,而访问没有。方法之间才说访问。所以说计算机学习的难点,语言是非常大的障碍,计算机知识很抽象很难描述。
访问权限 | 本类 | 本包类 | 本包中子类 | 非本包中的子类 | 非子类外包类 |
public | 可访问 | 可访问 | 可得到 | 可得到 | 可访问 |
protected | 可访问 | 可访问 | 可得到 | 可得到 | 不可访问 |
friendly | 可访问 | 可访问 | 可得到 | 不可得到 | 不可访问 |
private | 可访问 | 不可访问 | 不可得到 | 不可得到 | 不可访问 |
4、通过方法访问与通过实例访问是两码事实例:
public class Visit{ void print() { System.out.print("B"); } public static void main(String[] args) { Visit v = new Visit(); v.print(); } }
这里直接在main()中使用print()方法报错静态方法不可以访问非静态成员。
这里创建一个对象就可以了。