为什么在这个程序中覆盖的方法应该是public?

Why the overridden method should be public in this program?

import java.util.*;
interface AdvancedArithmetic{
  int divisor_sum(int n);
}
class MyCalculator implements AdvancedArithmetic
{
    int sum=0;
    int divisor_sum(int n)  //Why this method should be public?
    {
        for(int i=1;i<=n;i++)
        {
            if(n%i==0)
            sum=sum+i;
        }
        return sum;
    }
}

为什么 class MyCalculator 里面的方法应该是 public? 它显示了类似

的错误

错误:MyCalculator 中的 divisor_sum(int) 无法在 AdvancedArithmetic 中实现 divisor_sum(int) 整数 divisor_sum(整数 n) ^ 试图分配较弱的访问权限;是 public 1 个错误

int divisor_sum(int n)实现了一个接口方法。接口方法具有 public 访问权限(即使您没有明确指定),因此您不能降低方法在实现中的可见性 class.

考虑以下几点:

MyCalculator mc = new MyCalculator();
AdvancedArithmetic aa = mc;

如果您不为 MyCalculator class 中的 divisor_sum() 方法提供 public 访问级别,您将无法通过 class 引用 (mc.divisor_sum(4)),但您可以通过接口引用 (aa.divisor_sum(4)) 调用它。这是没有意义的,因此是不允许的。

考虑针对接口进行编程。 您的界面保证有一个方法 divisor_sum(int n),其中 public 作为(默认)访问修饰符。

现在,想象一下:

public void doSomething(AdvancedArithmetic implementation) {
    int test = implementation.divisor_sum(5);
    // continue
}

如果 Java 允许此 interface 的一个(ny)实现将它的 access modifier 方法比 interface 方法中的一个更窄,这将导致严重的问题和破坏软件,因为实施不遵循 interface.

的合同