Protected字段是为了继承而设计的.首先,一般的字段由于封装性,一般设置成private,但如果有新类继承当前字段所属的类,就要修改当前字段的访问控制权限.
如果子类和父类在同一个package中,只需要将private去掉,权限变为包访问权限即可;但是如果子类和父类不在同一个包内,为了能够让继承实现,必须把private改成public.对于类库和客户端程序而言,他们大多不在一个包内,为了能够让子类访问而改成public,这样使得其他不相关的类也能访问该成员(或方法),增加了风险.
所以设计了protected字段,他介于public和包访问权限之间.在跨包访问的过程中做了一个条件限定:包权限 + 只能让跨包的子类访问 (public权限 - 非子类跨包访问)
非常要注意的是,protected权限中的子类可访问指的是:在子类中可以通过子类对象直接访问继承来的父类的protected对象,但是不能通过父类对象访问该protected对象。同时,
在第三个类(不与子类、父类在同一个包)中,同过子类对象访问父类的protected成员或者方法,不行(只能在子类中)
Eg:
Package nima
Public class TTG{
Private int meme;
Private int gg;
Public static void main(String[] args){
Element Ele = new Element(1,2);
Ele.clone();
}
}
Class Element{
Int id;
Int value;
Public Element(int id, int value){
This.id = id;
This.value = value;
}
}
可以发现,子类Element从父类Object继承来的protected方法,只能在Element中访问,而在第三方类TTG中,不能通过其对象访问