java中权限修饰符protected的详细介绍
《java核心技术 卷I》中讲到protected是为了限制父类中的某个方法只允许子类访问,或者更少见地,可能希望允许子类的方法访问父类的某个字段。其实书中没有讲清楚,应该是protected是为了限制不同包情况下父类的某个方法只能被子类访问,或者更少见地,可能希望允许子类的方法访问父类的某个字段。见案例如下:
一、protected修饰字段的时候
(一)同包下访问受保护字段salary
package test;
public class Employee {
private String name;
protected double salary;
public int age;
}
package test;
public class Manager {
public static void main(String[] args) {
// TODO Auto-generated method stub
var em=new Employee();
em.age=10;
em.salary=1000;
}
}
(二)不同包且非子类访问受保护字段salary
(三)不同包的子类访问父类受保护字段salary
package test1;
import test.Employee;
public class Administrator extends Employee {
public static void main(String[] args) {
// TODO Auto-generated method stub
var ad=new Administrator();
ad.salary=1000;
}
}
不同包情况下,子类就能够访问了。
由以上实例得出第一个结论:
1.保护字段允许由同包中的类访问;
2.不同包中受保护字段只允许子类访问;
二、protected修饰方法的时候
(一)同一包中访问受保护方法
package test;
public class Employee {
private String name;
protected double salary;
public int age;
protected void raiseSalary(double byPercent) {
double raise=salary*byPercent/100;
salary+=raise;
}
}
package test;
public class Manager {
public static void main(String[] args) {
// TODO Auto-generated method stub
var em=new Employee();
em.age=10;
em.salary=1000;
em.raiseSalary(1000);
}
}
这里的Manager并不是Employee的子类,同包情况下,一样的能够访问到Employee类的受保护方法。我们再来看看不同包的情况。
(二)不同包且非子类访问受保护方法
不同包的非子类一样访问不了受保护方法。
(三)不同包的子类访问父类受保护方法
package test1;
import test.Employee;
public class Administrator extends Employee {
public static void main(String[] args) {
// TODO Auto-generated method stub
var ad=new Administrator();
ad.raiseSalary(1000);
}
}
能够调用,由此得出以下结论:
1.受保护方法允许同包中的类访问。
2.不同包中受保护方法只允许子类访问。
CSDN-Ada助手: 恭喜您写了这么一篇精彩的博客,介绍了Lambda表达式在比较器和动作监听器中的应用案例。我认为您的文章内容详实且易懂,对于Java开发者来说一定是很有价值的。希望您能继续保持创作热情,分享更多有趣实用的技术文章。同时,我也建议您可以尝试扩展一些相关的主题,让读者能够更深入地了解这方面的知识。再次感谢您的分享! CSDN 会根据你创作的博客的质量,给予优秀的博主博客红包奖励。请关注 https://bbs.csdn.net/forums/csdnnews?typeId=116148&utm_source=csdn_ai_ada_blog_reply7 看奖励名单。