public interface ICalculator {
public double multi(double a, double b);
public int add(int a, int b);
public int sub(int a, int b);
}
public class Calculator extends ICalculator {
protected int add(double a, double b) {
return a+b;
}
public double sub(int zahl1, int zahl2 ) {
return a*b;
}
}
为什么我不能在 Calculator 类中使用 protected 方法? 我的答案是“ protected ”在同一个类和子类中有用吗?好吧,我不能也认为从 Interface 实现的类中的方法也是继承的,就像子类一样。
最佳答案
您不能对子类中重写的方法添加更多限制。同样,您不能对从接口(interface)实现的方法添加更多限制。
现在,由于接口(interface)中定义的方法默认是public
(是的,您不需要显式地编写它),因此您无法使您的方法 protected
在实现类中。
原因很简单,当您使用多态性时,您可以实例化您的实现类
并将其引用存储在接口(interface)类型
中。
ICalculator calc = new Calculator(); //valid
calc.add(1, 2); // Compiler sees ICalculator method.
现在,当您使用 ICalculator
引用调用 add
方法时,编译器只会看到 ICalculator
中定义的方法,并相应地批准访问。但在运行时,实际调用的方法是 Calculator
类的形式,如果该方法实际上是从 不同的包
和非子类<调用的,现在会发生什么
-- BOOOOOOM
,它在运行时崩溃。
这就是为什么它是不允许的。
<小时/>当您添加额外的检查异常
时,同样的概念也适用。编译器将再次阻止你。但是,是的,您可以添加额外的Unchecked Exception
,因为这些编译器
会简单地忽略它们。
关于Java - 带接口(interface)的 protected 修饰符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13599276/