如果希望超类中的方法和属性能够被子类访问那么可以使用protected修饰符,但需要谨慎使用protected属性,它违背了数据封装原则(子类能访问父类的protected域),而protected修饰的方法是更具有实际意义的,比如Object的clone方法
protected可见性为:包可见以及子类可见
首先来解释一下什么是 包可见
创建一个 在test1包下的类Test1,其中有两个被protected修饰的String类型的属性,其中一个是静态的
在test1包下创建另一个类 Test3,在该类中创建Test1对象,发现不论是否经过static的修饰,变量string 和string1 在Test3类中都能够访问到。
显然,同包下即使两个类不具有继承关系,一个类也可以访问另一个类对象的protect属性
那么对于不同包下的子类是一个什么情况
此时在test2包下创建一个类Test2,该类继承了Test1,创建类Test2对象test2和类Test1对象test1
以下例子很明显看出:在不同包下的子类,无法通过父类对象访问父类对象的protected
原因:子类只是继承其父类的所有公共和受保护成员,意思可简单理解为子类拥有父类的protect修饰的属性
另外要注意的是:如果父类中被protected修饰的属性同时被static关键字修饰,那么我们是可以在不同包下的子类通过 父类名.属性名的方式去访问该属性。而不同包下的非子类却不能够访问。
protected属性给予同包下的权限实在是太大了