public class Doubt1{
public static void main(String[] args){
Manager m1 = new Manager(25000);
Manager m2 = new Manager(25000);``
System.out.println(m1.getSalary(250000) + " " + m2.getSalary()); //how is m1.getSalary working when getSalary(int) is protected in Employee class
}
}
class Employee{
protected int salary;
public Employee(int s){
salary = s;
}
protected int getSalary(int s){
return salary + s;
}
}
class Manager extends Employee{
public Manager(int s){
super(s);
}
public int getSalary(){
return salary;
}
}
我在manager类的Employee类中重载了getSalary方法。 Employee类的getSalaray(int)方法具有受保护的访问权限,因此只能从Manager类访问。但是当我调用m1.getSalary(25000)时,为什么编译器不会在员工类中抱怨"受保护的访问权限"当我声明方法私有时它会这样做?或者是受保护的访问修饰符,而不是我认为的那样?
答案 0 :(得分:3)
protected
访问修饰符允许比private
更多形式的访问。由于该方法位于同一个包或子类中,因此允许访问。
此处有更多信息http://docs.oracle.com/javase/tutorial/java/javaOO/accesscontrol.html
答案 1 :(得分:2)
protected
方法允许同一package
的其他成员访问。
访问级别图表:
Modifier Class Package Subclass World
public Y Y Y Y
protected Y Y Y N
no modifier Y Y N N
private Y N N N
中阅读更多内容