Java基础:访问限制修饰符
来源:互联网 发布:个人理财软件 编辑:程序博客网 时间:2024/05/21 23:57
Java基础:访问限制修饰符
访问限制修饰符有private,public,protected,他们都是Java的关键字,用来修饰成员变量和方法。
注意,在编写类的时候,类中的实例方法总是可以操作该类中的实例变量和类变量。类方法总是可以操作该类中的类变量,与访问限制符没有关系。
公有变量和公有方法
使用public修饰。权限最高,可以在不同包中不同类中被访问。
受保护的变量和受保护的方法
使用protected修饰。可以被继承。除了子类以外,在别的包的类中无法引用protected修饰的变量和方法。
友好变量和友好方法
不用public、protected、private修饰符等修饰的成员变量和方法。权限从上至下排在第三。只能在该包中使用,包括不能被别的包的子类继承。
私有变量和私有方法
用关键字private修饰。只能被当前类使用,不能被其他类拿出来使用。是定义某个权限最低的变量和方法的关键字。也无法被继承。
两种类
分别为public修饰的和友好类(即不加任何修饰符),除此之外,使用protected和private修饰的都是错误的,不存在的。
友好类的访问权限限制于当前包。
protected和默认修饰符的区别
到目前为止,两者似乎没有什么区别。但是两者的确是有区别的,在子类继承的时候。分为两种情况:
当子类和父类在同一个包下:
子类可以继承父类中不是private的变量和方法。
当子类和父类在不同包下:
子类只能继承protected和public的成员变量。
protected的进一步说明:
假设s包下有两个类,分别是temp5和test_temp5。t包下有一个类是temp2。现在temp5继承了temp2。我们来看在temp5和test_temp5中关于父类的操作权限。
temp2.java
package t;public class temp2{ private int a; private int getA(){ return a; } protected int b; protected int getB(){ return b; } int c; int getC(){ return c; } public int d = 0; int getD(){ return d; }}
temp5.java
package s;import t.temp2;public class temp5 extends temp2{ //在构造方法中查看可以使用的哪些继承来的变量 public temp5(){ this.a = 1; //a是private的,显然报错 this.b = 1; //b是protected的 this.c = 1; //c是默认的,也会报错 this.d = 1; //d是public的 }}
test_temp5.java
package s;public class test_temp5 { public test_temp5(){ temp5 tem5 = new temp5(); tem5.a = 1; //报错,tem5对象的该变量继承自另外一个包,因此无法访问。 tem5.b = 1; //报错 tem5.c = 1; //报错 tem5.d = 1; } }
分析上述代码:
- 对于子类temp5从temp2继承的protected成员变量和方法,需要追溯到protected成员变量和方法所在的“祖先类”,只要test_temp5类和temp5的祖先类在一个包中,那么用temp5创建的对象就可以被test_temp5访问它继承的protected变量和方法。
- 在不同包中,子类永远可以访问继承的protected和public变量和方法。
一个示例
(默认包)
Main.java
import s.temp5;import t.temp2;import t.temp3;public class Main{ public static void main(){ Abc abc = new Abc(); Abcd abcd = new Abcd(); temp tem = new temp(); //同一个包下继承了Abc的类 temp2 tem2 = new temp2(); //在不同包下,无法继承Main类的Abc类,因为Abc是友好类,无法被别的包下的类继承。 temp3 tem3 = new temp3(); //与temp2在同一个包下,继承了temp2 abc.a = 1; //使用abc对象的a变量,为private,报错 abc.b = 1; //使用abc对象的b变量,为protected abc.c = 3; //default abcd.b = 2; //protected abcd.c = 3; //default tem.b = 1; //protected tem.c = 2; //default tem2.b = 1; //protected,报错,无法访问其protected变量 tem2.c = 1; //报错,无法访问其友好变量 tem2.d = 1; //public的可以访问 tem3.d = 1; //temp3继承了temp2,同上 }}class Abc{ private int a; private int getA(){ return a; } protected int b; protected int getB(){ return b; } int c; int getC(){ return c; }}class Abcd extends Abc{}
temp.java
public class temp extends Abc{}
t包
temp2.java
package t;public class temp2{ private int a; private int getA(){ return a; } protected int b; protected int getB(){ return b; } int c; int getC(){ return c; } public int d = 0; int getD(){ return d; }}
temp3.java
package t;public class temp3 extends temp2{}
- Java基础:访问限制修饰符
- java语言访问 限制修饰符
- Java基础:访问修饰符
- Java基础--访问修饰符
- Java基础------访问修饰符
- java基础三:访问修饰符
- java基础之访问修饰符
- java基础笔记之访问修饰符
- Java基础之--访问权限修饰符
- Java基础之访问修饰符
- Java中访问限制修饰符的不足
- 【C#学习】访问限制修饰符
- java 访问修饰符
- java 访问修饰符
- Java访问修饰符
- java 访问修饰符
- java访问修饰符
- Java访问修饰符
- Array
- 10大人生感悟助你走向成功之路
- BFS深度优先搜索 炸弹人
- Leetcode-标签为Tree 226. Invert Binary Tree
- win7用虚机搭建docker开发测试环境的网络配置,免去端口映射烦恼
- Java基础:访问限制修饰符
- The import android.support cannot be resolved解决方法
- BFS广度优先搜索 炸弹人
- Unit --面试常问题一
- CAE开发日志(3):Condition类
- Spark 开发环境搭建(2)IDEA 安装新版本IntelliJ IDEA 2017.1
- 浅谈守护进程
- maven下载jar包过慢
- opencv mat数据剪裁感兴趣的部分处理方法