代码段如下:
interface Demo {
void incrementCount();
int getCount();
}
class ChildDemo implements Demo {
public int count = 10;
private void incrementCount() {
count++;
}
public int getCount(){
return count;
}
public static void main(String[] args){
int res;
Demo ob= new ChildDemo ();
res = ob.getCount();
System.out.println(res);
}
}
而且,我得到的输出如下:
Compilation Error:incrementCount() in ChildDemo cannot implement incrementCount() in Demo; attempting to assign weaker access privileges to the method.
我想澄清一些事情:
1。为什么这是一个错误?什么是尝试分配较弱的访问权限?
2。将其更改为private
- 方法incrementCount()
仍然可以执行其计算吗?
3。应该进行哪些更改以将输出作为
10
4。应该对输出进行哪些更改:
11
提前致谢。
答案 0 :(得分:1)
有一点是,根据具体情况,它是不允许的,但是如果您可以授予方法private
访问权限,那么它将不再可见,从而破坏了接口的合同。在您的示例中,您永远不会调用incrementCount()
,因此count
变量的值将保持10
。
答案 1 :(得分:1)
因为您要限制对private
的方法访问权限。
界面中的所有方法都是隐式公开的,无论您是否明确声明它。
http://docs.oracle.com/javase/tutorial/java/IandI/interfaceDef.html
公共访问说明符表示该接口可以被任何包中的任何类使用。如果未指定接口是公共接口,则只能在与接口相同的包中定义的类中访问您的接口。
答案 2 :(得分:1)
在接口内声明的方法是隐式public
,接口中声明的所有varibales都是隐含的public static final(常量)。
但是,您正在使用private
访问权限
private void incrementCount(){
count++;
}
因此修复方法是将public
关键字添加到方法
public void incrementCount(){
count++;
}
答案 3 :(得分:1)
接口中声明的所有方法默认都是 public和abstract。所以你需要在实现类中定义这些方法,或者你必须将类声明为抽象。
您必须 understand the rules for overriding methods 才能摆脱此错误。其中一条规则是重写的方法不能拥有较弱的访问说明符。因此,您不能在重写方法中将公共方法设置为私有或受保护。 Child class overridden method public ,您的代码应该可以正常工作。