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类中的方法应该是公共的? 它显示错误,如
错误:MyCalculator中的divisor_sum(int)无法在AdvancedArithmetic中实现divisor_sum(int) int divisor_sum(int n) ^ 试图分配较弱的访问权限;是公开的 1错误
答案 0 :(得分:3)
Value
RegionName DistrictName
Auckland Auckland City 2459.0
Total 2459.0
Canterbury Ashburton 451.0
Banks Peninsula 132.0
Christchurch City 2046.0
Total 2629.0
Central Otago & Lakes District Central Otago* Central Otago & Lakes District 190.0
Total 190.0
Hawkes Bay Central Hawkes Bay 67.0
Total 67.0
Otago Clutha 119.0
Dunedin City 312.0
Total 431.0
Wellington Carterton 75.0
Total 75.0
West Coast Buller 361.0
Total 361.0
实现了一个接口方法。接口方法具有int divisor_sum(int n)
访问权限(即使您未明确指定它),因此您无法降低实现类中方法的可见性。
请考虑以下事项:
public
如果您未在MyCalculator mc = new MyCalculator();
AdvancedArithmetic aa = mc;
类divisor_sum()
访问级别中提供MyCalculator
方法,则无法通过类引用(public
)调用它),但您可以通过界面参考(mc.divisor_sum(4)
)调用它。这没有任何意义,因此不允许。
答案 1 :(得分:0)
考虑针对接口进行编程。
您的界面保证有divisor_sum(int n)
方法public
作为(默认)访问修饰符。
现在,想象一下:
public void doSomething(AdvancedArithmetic implementation) {
int test = implementation.divisor_sum(5);
// continue
}
如果Java允许这个interface
的(ny)实现使该方法的access modifier
比interface
更窄,那么导致严重问题并破坏软件,因为实施不符合interface
的合同。