为什么重写的方法在此程序中应该是公共的? import java.util.*; 界面高级仿人{ 整数除数和(整数n); } 类MyCalculator实现AdvanceDataMatic { 整数和=0; int除数_和(int n)//为什么这个方法应该是公共的? { for(int i=1;i

为什么重写的方法在此程序中应该是公共的? import java.util.*; 界面高级仿人{ 整数除数和(整数n); } 类MyCalculator实现AdvanceDataMatic { 整数和=0; int除数_和(int n)//为什么这个方法应该是公共的? { for(int i=1;i,java,interface,public,access-specifier,Java,Interface,Public,Access Specifier,int除数和(int n)实现了一个接口方法。接口方法具有public访问权限(即使您没有明确指定),因此无法降低该方法在实现类中的可见性 考虑以下几点: import java.util.*; interface AdvancedArithmetic{ int divisor_sum(int n); } class MyCalculator implements AdvancedArithmetic { int sum=0; int divisor_sum(int n)

int除数和(int n)
实现了一个接口方法。接口方法具有
public
访问权限(即使您没有明确指定),因此无法降低该方法在实现类中的可见性

考虑以下几点:

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

如果在
MyCalculator
class a
public
访问级别中没有给出
divisior\u sum()
方法,您将无法通过类引用调用它(
mc.divisior\u sum(4)
),但可以通过接口引用调用它(
aa.divisior\u sum(4)
)。这毫无意义,因此是不允许的。

考虑针对接口编程。 您的接口保证有一个方法
除数\u和(int n)
,该方法使用
公共
作为(默认)访问修饰符

现在,想象一下:

MyCalculator mc = new MyCalculator();
AdvancedArithmetic aa = mc;
如果Java允许(ny)实现此
接口
将方法的
访问修饰符
放在比
接口
更窄的范围内,这将导致严重的问题和中断软件,因为实现没有遵循接口上所有方法的契约(Java 9之前)是公开的,无论您是否声明。
public void doSomething(AdvancedArithmetic implementation) {
    int test = implementation.divisor_sum(5);
    // continue
}