我怎样才能从不从该类继承的类中访问受保护的方法?

时间:2015-04-17 18:17:21

标签: java methods overloading protected

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)时,为什么编译器不会在员工类中抱怨"受保护的访问权限"当我声明方法私有时它会这样做?或者是受保护的访问修饰符,而不是我认为的那样?

2 个答案:

答案 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

Oracle tutorial

中阅读更多内容