java - 我如何能够从不继承自该类的类访问 protected 方法?

标签 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;
    }
}

我在经理类中重载了 Employee 类的 getSalary 方法。 Employee 类的 getSalaray(int) 方法具有 protected 访问权限,因此只能从 Manager 类访问。但是,当我调用 m1.getSalary(25000) 时,为什么编译器不像我将方法声明为私有(private)时那样提示“员工类中的 protected 访问”?或者 protected 访问修饰符是不是我想象的那样?

最佳答案

protected 访问修饰符允许比 private 更多形式的访问。由于该方法位于同一个包或子类中,因此允许访问。

更多信息请点击 http://docs.oracle.com/javase/tutorial/java/javaOO/accesscontrol.html

关于java - 我如何能够从不继承自该类的类访问 protected 方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29706635/

相关文章:

java - org.aspectj.lang.NoAspectBoundException - 未找到方法 <init>()V

java - 有没有比 java.lang.Math.sqrt(double) 更准确的平方根函数

java - 使用额外信息登录 Android 中的 Sentry

javascript - 微调性能时,多次调用 JavaScript 方法的最佳方式是什么?

ruby - Ruby 中的猴子修补和重载方法

c++ - constexpr 重载

java - JVM 发生异常 :Need Bluetooth permission: Neither user 10258 not current process has android. 权限。蓝牙 python jnius?

c# - 仅传递接受的参数值的方法

java - 在方法中使用实例变量 Linkedlist() - 为什么我必须在方法体中创建 new

java - 为什么在 Java 中使用默认的 Object equals 方法更好?