Java抽象关键字和接口

时间:2013-05-02 05:54:13

标签: java

代码段如下:

    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

提前致谢。

4 个答案:

答案 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 ,您的代码应该可以正常工作。