- 访问限定修饰符图表
一 、private
1.为什么要使用private
出于安全性考虑,避免传递非法数据,在写字段时,尽量考虑采用封装,这样可以隐藏类的细节,只对外开放接口即可实现对象之间的交互。
2.private关键字
- private是一个访问限定修饰符
- 被修饰的成员只能在本类中才能访问,若该成员需要被其他类使用,要提供相应操作
-
可修饰的的范围:
修饰成员变量:表示当前成员变量只能在当前类中使用
修饰成员方法:表示当前成员方法只能在当前类中使用
3.实例
//创建类
public class Friend{
//属性
private String name;
private int age;
//对于每个私有化成员变量均需提供 get set 方法
//set方法:给成员变量赋值
//get方法:对外提供成员变量的值
//给成员变量name赋值
public void setName(String n){//使用public,表示公共的,在所有地方均可使用
name=n;
}
//对外提供name属性
public String getName(){
return name;
}
//age同理
//行为
public void sleep(){
System.out.printf("shui jiao")
}
}
二、default
即不加任何访问修饰符,通常称为“默认访问权限“或者“包访问权限”。该模式下,只允许在同一个包中进行访问,外包的所有类都不能访问。
三·、protected
class AudioPlayer {
/*
*如果把openSpeaker()声明为private,那么除了AudioPlayer之外的类将不能访问该方法。
*如果把openSpeaker()声明为public,那么所有的类都能够访问该方法。
*如果我们只想让该方法对其所在类的子类可见,则将该方法声明为protected。
*/
protected boolean openSpeaker(Speaker sp) {
}
}
class StreamingAudioPlayer AudioPlayer {
protected boolean openSpeaker(Speaker sp) {
}
}
该关键字的权限是为继承而设计的,protected所修饰的成员,对所有子类是可访问的,但只对同包的类是可访问的,对外包的非子类是不可以访问
注意: 要区分开 protected 权限、包访问权限
当某个成员能被所有的子类继承,但不能被外包的非子类访问,就是用protected;
当某个成员的访问权限只对同包的类开放,包括不能让外包的类继承这个成员,就用包访问权限
注意
1.四种访问权限范围的大小从小到大:private<default(默认访问权限)<protected<public。
2.当定义变量时不加任何修饰会默认为默认权限。
3.在子类中访问父类中的变量时需要用super。
访问控制和继承
请注意以下方法继承的规则:
1)父类中声明为 public 的方法在子类中也必须为 public。
2)父类中声明为 protected 的方法在子类中要么声明为 protected,要么声明为 public,不能声明为 private。
3)父类中声明为 private 的方法,不能够被继承。