首页 > 代码库 > 再学Java 之 private、protected、public和default的作用域
再学Java 之 private、protected、public和default的作用域
前言:如果提到protected的访问控制级别,您的第一反应是”只能是子类才可以访问“,那么您很可能需要往下看。
首先,大致介绍一下各个访问控制符的访问控制级别(具体的介绍很多大牛的博文都有介绍,我就不细说了,可以点击 这里 查看),如下图:
private | default | protected | public | |
同一个类中 | ||||
同一个包中 | ||||
子类中 | ||||
全局范围内 |
在这里,很多人都存在一个误区,就是,认为protected修饰的方法只能在子类中才能访问,其他情况下不行;事实上,正确的表述方式应该是”如果在同一个包,则protected修饰的成员都可以被访问到;假如不在同个包,则只有子类才能访问到“。
下面写一个实例(也可以到 这里 下载):
(1)首先是程序的结构,这里,有两个包,分别有com.harvin包含parent和child类;com.other包含other_child类
(2)com.harvin.Parent类的代码:
package com.harvin; /* * @author harvin */ public class Parent { public static void main(String[] args){ } private void private_method() { } protected void protected_method() { } void default_method(){ } public void public_method(){ } }
(3)com.harvin.child类代码:
package com.harvin; public class Child{ private void private_method() { //这里会报错。因为private修饰的成员,其他类均不可访问 new Parent().private_method(); } protected void protected_method() { //同一个包内,不过是不是子类,都可以访问到protected成员 new Parent().protected_method(); } void default_method(){ //同一个包内,也可以访问 new Parent().default_method(); } public void public_method(){ new Parent().public_method(); } }
(4)com.other.other_child类的代码:
package com.other; import com.harvin.*; public class Other_child extends Parent{ private void private_method() { //这里会报错。因为private修饰的成员,其他类均不可访问 super.private_method(); } protected void protected_method() { //这里会报错。不在同一个包内,但是是parent的子类,所以可以访问 super.protected_method(); } void default_method(){ //这里会报错。不在同一个包内,不可以访问 super.default_method(); } public void public_method(){ super.public_method(); } }
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。