导语
封闭性与访问控制权限是有直接联系的。
主要内容
- Java访问控制权限
具体内容
在Java里面一共支持四种控制权限。public、protected、default、private,而这四种访问控制权限特点:
No. | 范围 | private | default | protected | public |
---|---|---|---|---|---|
1 | 在同一个类中 | √ | √ | √ | √ |
2 | 在同一包的不同类 | √ | √ | √ | |
3 | 在不同包的子类 | √ | √ | ||
4 | 在不同包的非子类 | √ |
除了public之外,对于封装可以使用private、protected、default,只不过一般不会去考虑使用default。
重点来看protected这种权限。它直接与包的定义有关。
protected访问权限
protected访问权限,它直接与包的定义有关。
**范例:**protected访问权限
定义cn.mldn.demoa.A类
package cn.mldn.demoa;
public class A {
protected String info = "Hello";
}
定义cn.mldn.demob.B类
package cn.mldn.demob;
improt cn.mldn.demoa.A;
public class B extends A { // 是A不同包的子类
public void print() {
System.out.println("A类中的info = " + super.info)
}
}
定义Test类
package test;
improt cn.mldn.demob.B;
public class Test {
public static void main(String args[]) {
new B().print();
}
}
输出结果:
A类中的info = Hello
B中的print()方法会输出A类中的info属性。
Test类直接去输出A类中的info属性(错误代码)
package test;
improt cn.mldn.demoa.A;
public class Test {
public static void main(String args[]) {
A a = new A();
System.out.println(a.info);
}
}
编译会出错,由于Test与A类不在同一个包,并且没有继承关系,所以是无法访问protected属性的。
总结
Java的封装性是以private、protected、default三种权限的定义。