1

コード スニペットは次のとおりです。

    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

4 に答える 4

1

1 つのことは、仕様によって許可されていないことですが、メソッドprivateアクセスを許可できた場合、それはもはや表示されなくなり、インターフェイスの契約が破られます。あなたの例では、決して呼び出していないincrementCount()ので、count変数の値はそのままです10

于 2013-05-02T05:55:52.817 に答える
1

へのメソッド アクセスを制限しているためですprivate

インターフェイス内のすべてのメソッドは、明示的に宣言するかどうかに関係なく、暗黙的にパブリックになります。

http://docs.oracle.com/javase/tutorial/java/IandI/interfaceDef.html

public アクセス指定子は、インターフェイスが任意のパッケージ内の任意のクラスで使用できることを示します。インターフェイスがパブリックであることを指定しない場合、インターフェイスは、インターフェイスと同じパッケージで定義されたクラスにのみアクセスできます。

于 2013-05-02T05:56:42.200 に答える
1

インターフェイス内で宣言されたメソッドは暗黙的に bypublicであり、インターフェイスで宣言されたすべての変数は暗黙的に public static final(constants) です。

しかし、あなたはprivateアクセスを使用しています

private void incrementCount(){    
    count++;   
} 

したがって、修正はpublicメソッドにキーワードを追加することです

public void incrementCount(){    
count++;   
} 
于 2013-05-02T05:57:44.837 に答える
1

インターフェイスで宣言されたすべてのメソッドは、デフォルトでpublic および abstract です。したがって、これらのメソッドを実装クラスで定義するか、クラスを抽象として宣言する必要があります。

このエラーを回避するには、メソッドをオーバーライドするためのルールを理解する必要があります。ルールの 1 つは、オーバーライドされたメソッドは弱いアクセス指定子を持つことができないと述べています。したがって、オーバーライドされたメソッドでパブリック メソッドをプライベートまたは保護することはできません。Childクラスのオーバーライドされたメソッドを publicにすると、コードが正常に動作するはずです。

于 2013-05-02T06:00:26.673 に答える