大家好,我是walker
一个从文科自学转行的程序员~
爱好编程,偶尔写写编程文章和生活
欢迎关注公众号【I am Walker】,一块学习编程~
我的gitee:https://gitee.com/shen-chuhao/walker.git 里面很多技术案例!
定义
Java中,可以使用访问修饰符来保护对类、变量、方法和构造方法的访问。Java 支持 4 种不同的访问权限。
修饰范围
private:变量,方法
default:类、接口、变量、方法
protected:变量、方法
public:类、接口、变量、方法
分类
- private : 在同一类内可见。使用对象:变量、方法。 注意:不能修饰类(外部类)
- default (即缺省,什么也不写,不使用任何关键字): 在同一包内可见,不使用任何修饰符。使用对象:类、接口、变量、方法。
- protected : 对同一包内的类和所有子类可见。使用对象:变量、方法。 注意:不能修饰类(外部类)。加粗样式
- public : 对所有类可见。使用对象:类、接加粗样式口、变量、方法
访问修饰符
protected和default修饰符的测试
1、创建2个包、4个类
2、类
- 有protected属性的类
package decorateTest;
public class DecorateData {
/**
* protected修饰符A
*/
protected String A="hello";
/**
* default修饰符
*/
String B="hello";
}
- 同个包下的类
package decorateTest;
public class DecorateSamePacket {
public static void main(String[] args) {
DecorateData decorateTest = new DecorateData();
//protected可以访问到同包下的
System.out.println(decorateTest.A);
//default在同包下可以访问
System.out.println(decorateTest.B);
}
}
- 不同包,不是DecorateData子类的类
package decorateTest2;
import decorateTest.DecorateData;
public class DecorateDataNotSon {
public static void main(String[] args) {
DecorateData decorateData = new DecorateData();
//不是decorateData的子类,无法获取属性A
//default修饰符在不同包+非子类下无法获取 属性B
}
}
- 不同包,是DecorateData的子类
package decorateTest2;
import decorateTest.DecorateData;
public class DecorateDataSon extends DecorateData{
public static void main(String[] args) {
//实例化父类是看不到属性A的
DecorateData decorateData = new DecorateData();
//实例化本身才可以见到protected修饰的属性A
DecorateDataSon decorateDataSon = new DecorateDataSon();
System.out.println(decorateDataSon.A);
//default修饰符在子类前提下,也无法获取
}
}