为什么在这个程序中覆盖的方法应该是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
.
的合同
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
.