7

私は2つのファイルを持っています:

public interface PrintService {
    void print(PrintDetails details);
    class PrintDetails {
        private String printTemplate;
    }
    public interface Task {
        String ACTION = "print";
    }
}

public class A implements PrintService {
    void print(PrintDetails details) {
        System.out.println("printing: " + details);
    }
    String action = PrintService.Task.ACTION;   
}

コードは問題ないように見えますが、次の行の 2 番目のファイルでエラーが発生していますvoid print(PrintDetails details) {

から継承されたメソッドの可視性を減らすことはできませんPrintService

誰かがこれが私にとって何を意味するのか説明できますか?

4

2 に答える 2

24

Java インターフェイスでは、各メソッドはデフォルトでpublic次のようになります。

インターフェイス本体のすべてのメソッド宣言は暗黙のうちに抽象的であるため、その本体は常にブロックではなくセミコロンで表されます。

インターフェイス本体のすべてのメソッド宣言は、暗黙的にパブリックです。[..]

実装クラスでは、アクセス修飾子を指定しないことによって可視性を下げることはできません。

void print(){..}

アクセス レベルdefaultを指定していますが、これは よりも可視性が低くなりpublicます。

于 2012-06-14T10:54:54.763 に答える
3

インターフェースでは、デフォルトですべてのメソッドがパブリックで抽象的であるため、インターフェースが実装されているクラスでメソッドをパブリックにします。

于 2016-06-16T11:20:47.313 に答える