java四种访问权限
java有四种访问权限,它们各自的范围如下图所示

当下列访问修饰符修饰字段和方法时:
private
任意位置的子类不可以访问从父类继承的private字段和方法。这里所说的访问包括通过super关键字访问。
任意位置的对象不能通过“.”访问对象的字段和方法。
public
任意位置的子类可以访问从父类继承的public字段和属性。
任意位置的对象可以通过“.”访问字段和属性。
default
当子类与父类在同一包下时,子类可以访问从父类继承的default权限的字段和方法。
当创建该对象的类与该对象所属的类在同一包下时,可以通过“.”访问对象的字段和方法。
对于父类中的private、default权限的一些方法和字段,子类在一定程度上不能访问它们,通过super访问也不行。但子类对象初始化时,不仅子类中声明的成员变量分配了内存,父类的成员变量也都分配了内存,只是父类的成员不能被子类访问罢了。但是我们可以通过子类从父类继承的某些方法来操作这部分不能访问的变量。
protected
上面的三种访问权限都很好理解,protected的描述却不是那么清晰。
1)、当子类访问从父类继承的成员或方法时,不管是否在同一包都可以,在这个情况下同public权限。
测试: p2包下的C2继承p1包下的C1,C2在类中可以直接访问继承来的方法
package p1;
public class C1 {
protected void fun() {}
}
package p2;
import p1.C1;
public class C2 extends C1{
public void test() {
fun();
}
}
编译正确:

2)当访对象要用“.”访问对象的protected字段(方法)时,分两种情况讨论
i 如果访问的这个方法(字段)是该对象的类自己定义的,且类型是protected。要求对象所在类与对象所属类在同一包下。
package p1;
public class C1 {
protected void fun() {}
}
package p2;
import p1.C1;
public class C2{
public void test() {
new C1().fun();
}
}
编译报错:(因为对象所在类p2.C2与对象所属类p1.C1不在同一包下)

将C2放在包p1下后:
package p1;
public class C2{
public void test() {
new C1().fun();
}
}
编译正确:

ii 如果对象访问的这个方法是该对象的类继承而来的。要求对象所在类与该方法(字段)被最初被定义的类在同一包下。其实 i 是 ii 的特殊情况。
测试: C2继承C1的protected方法fun(),C3调用C2继承的fun()方法,C3与C2在同一包下,编译报错。
package p1;
public class C1 {
protected void fun() {}
}
package p2;
import p1.C1;
public class C2 extends C1{
}
package p2;
public class C3{
public void test() {
C2 c2 = new C2();
c2.fun();
}
}
编译结果:

测试:将上面的示例改变一下,C3放到C1的包下,编译通过。
package p1;
import p2.C2;
public class C3{
public void test() {
C2 c2 = new C2();
c2.fun();
}
}
编译结果:

protected总结:当在子类内部访问从父类继承而来的protected字段(方法)时,没有包限制。当对象通过“.”访问字段(方法)时,被protected修饰的方法(字段)的可见范围是,该字段(方法)被定义的类所在的包。
本文个人编写,水平有限,如有错误,恳请指出,欢迎讨论分享。
java四种访问权限的更多相关文章
- java基础(八)-----深入解析java四种访问权限
Java中的访问权限理解起来不难,但完全掌握却不容易,特别是4种访问权限并不是任何时候都可以使用.下面整理一下,在什么情况下,有哪些访问权限可以允许选择. 一.访问权限简介 访问权限控制: 指的是本类 ...
- java基础(七) java四种访问权限
引言 Java中的访问权限理解起来不难,但完全掌握却不容易,特别是4种访问权限并不是任何时候都可以使用.下面整理一下,在什么情况下,有哪些访问权限可以允许选择. 一.访问权限简介 访问权限控制: ...
- java四种访问权限修饰符
java中四个访问权限修饰符: public(公开的).protected(受保护的).default(默认的).private(私有的). 它们决定了紧跟其后被定义的东西的使用范围. 适用范围< ...
- java四种访问权限符
(PS:其中private和protected不能修饰一般的类,否则编译就会报“modifier private not allowed here”,如果是内部类就另当别论了)
- Java四种访问修饰符
Java 四种访问权限 一.概述 访问等级比较:public > protected > default > private 无论是方法还是成员变量,这四种访问权限修饰符作用都一样 ...
- Java中四种访问权限总结
一.Java中有四种访问权限, 其中三种有访问权限修饰符,分别为private.public.protected,还有一种不带任何修饰符(default). 1. private: Java语言中对访 ...
- java四种访问控制权限:public ,default,protected,private
四种访问权限的控制 范围 private default protected public 同一个类中 √ √ √ √ 相同包不同类 × √ √ √ 不同包的子类中 × × √ √ 不同包非子类 × ...
- java四种访问修饰符及各自的权限
1.public,即共有的,是访问权限限制最宽的修饰符.被public修饰的类.属性.及方法不仅可以跨类访问,而且可以跨包访问. 2. protected,即保护访问权限,是介于public和priv ...
- java中的四种访问权限是?
1.私有权限(private) private可以修饰数据成员,构造方法,方法成员,不能修饰类(此处指外部类,不考虑内部类).被private修饰的成员,只能在定义它们的类中使用,在其他类中不能调用. ...
随机推荐
- C/C++ 合法整数与字符
一.C语言中的合法整型 首先C语言中的整型有三种表示方式:十进制.八进制和十六进制.(C语言中没有表示二进制的整型) 十进制: 如 int a = 63; //一个正常的整型 八进制: 如果想用8进制 ...
- mongodb---js脚本操作速记
之前写一些mongodb的同步或操作程序,往往使用perl,甚至c实现,这样程序很繁琐,而且逻辑不好控制,甚至一些功能和命令什么的,在这些语言的mongo驱动中就没有实现.后来发现mongodb 的s ...
- RabbitMQ的事件总线
RabbitMQ的事件总线 在上文中,我们讨论了事件处理器中对象生命周期的问题,在进入新的讨论之前,首先让我们总结一下,我们已经实现了哪些内容.下面的类图描述了我们已经实现的组件及其之间的关系,貌似系 ...
- AngularJs学习笔记--Modules
原版地址:http://code.angularjs.org/1.0.2/docs/guide/module 一.什么是Module? 很多应用都有一个用于初始化.加载(wires是这个意思吗?)和启 ...
- jquery Jbox 插件实现弹出窗口在修改的数据之后,关闭弹出窗口刷新父页面的问题
http://blog.csdn.net/nsdnresponsibility/article/details/51282797 问题如题: 这里我们在父页面定义一个全局的变量来标识是否需要刷新父页面 ...
- 一.Mysql主从复制配置
在我之前的文章四·安装mysql-5.7.16-linux-glibc2.5-x86_64.tar.gz(基于Centos7源码安装 和 九.mysql数据库多实例安装mysqld_multi [st ...
- Yii中POS和GET并用范例
页面 <?php $form=$this->beginWidget('CActiveForm', array( 'id'=>'add-form', 'enableAjaxValida ...
- 小知识积累-C++使用tinyxml解析Xml内存泄漏问题
项目中需要用到C++解析XML,网上搜到tinyxml这么个开源库,就用了下试试,创建对象后内部自带Clear方法,但在循环测试的时候(刚用C++做项目不久,不会什么特别的内存泄漏测试工具,于是就写个 ...
- C++ 全局变量不明确与 using namespace std 冲突
写了个汉诺塔,使用全局变量count来记录步数,结果Error:count不明确 #include <iostream> using namespace std; ; void hanoi ...
- python 爬取猫眼下的榜单(一)--单个页面
#!/usr/bin/env python # -*- coding: utf- -*- # @Author: Dang Kai # @Date: -- :: # @Last Modified tim ...