Java 访问修饰符

最近,又复习了一下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后,这个方法对于子类而言不具有可见性,谈何实现(覆盖)。

转载请注明如下内容:

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,767评论 18 399
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,991评论 19 139
  • 纯粹是个人学习总结,如有不对的地方请吐槽。 public public修饰的类、类属变量及方法,包内及包外的任何类...
    junwu_123阅读 159评论 0 0
  • 在Class 、Field 、Constructor 等类中,可以看到有这样一个方法:getModifiers()...
    Android技术研究阅读 999评论 0 1
  • 时光越老,人心越淡,岁月是贼,总是不经意的偷走我们许多…… 万事穿心过,平淡不留痕 难留最是如花景,由任西风把梦销...
    李hong青阅读 909评论 5 2