Java学习笔记就是杨宗的学习记录Java 杂谈

Java 访问修饰符

2017-09-28  本文已影响19人  就是杨宗

最近,又复习了一下Java的访问修饰符,总结一下吧。
Java中有三种访问修饰符,分别是public、protected和private,不带任何修饰符则称之为default。
Java的访问权限控制只存在于编译阶段,而编译生成的字节码文件事实上没有留下任何痕迹,只是在编译的时候进行访问权限的检查。其实,通过反射的手段,可以访问任何包下任何类的成员,例如,访问类的私有成员也是可能的。

一、类

类不能被protected和private修饰,一个源文件中只能有一个public类,并且该源文件名要和public类名一致,其他类只能是default。

二、成员变量和成员方法

简单而言,private具有类内可见性,default具有包内可见性,protected具有包内和子类可见性,public具有包外可见性。
假设类A有public、protected、private和default修饰的成员变量和成员方法。

  1. 在类A的成员方法中,可以直接访问和调用类A中用public、protected、private和default修饰的成员变量和成员方法。
  2. 在类A的main方法中,可以通过构造类A的对象访问和调用public、protected和default修饰的成员变量和成员方法。
  3. 与类A在同一个包中,未继承类A的其他类的成员方法或者main方法,与(2)一致。
  4. 与类A在同一个包中,继承类A的子类,子类的成员方法可以直接访问和调用父类中用public、protected和default修饰的成员变量和成员方法;子类的main方法也是和(2)一样的。
  5. 与类A不在同一个包中,未继承类A的其他类的成员方法或者main方法只能通过构造类A的对象访问public修饰的成员变量和成员方法。
  6. 与类A不在同一个包中,继承类A的子类,它的成员方法可以直接访问和调用父类中用public和protected修饰的成员变量和成员方法;子类的main方法同(5)。
三、关于private的一些事

private修饰final方法没有意义,因为final方法本身就不允许子类覆盖它,然而加上private后,这个方法对于子类而言不具有可见性,谈何覆盖。
private修饰abstract方法是错误的,abstract方法要求子类实现它,然而加上private后,这个方法对于子类而言不具有可见性,谈何实现(覆盖)。

转载请注明如下内容:

文章来自简书,作者:就是杨宗
原文链接:http://www.jianshu.com/p/e81452a19228

上一篇 下一篇

猜你喜欢

热点阅读