为什么重写的方法在此程序中应该是公共的? 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 apublic
访问级别中没有给出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
}