Meaning of “Cannot reduce the visibility of the inherited method” with an interface

末鹿安然 提交于 2019-11-26 14:37:38

问题


I have two files:

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

and

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

I thought the code looks okay, but I am getting an error in the second file for the line void print(PrintDetails details) { that states:

Cannot reduce the visibility of the inherited method from PrintService.

Can someone explain what this means for me?


回答1:


In a Java interface each method is by default public:

Every method declaration in the body of an interface is implicitly abstract, so its body is always represented by a semicolon, not a block.

Every method declaration in the body of an interface is implicitly public. [..]

In an implementing class you are not allowed to reduce the visibility, and by not specifying an access modifier:

void print(){..}

you are specifying the access level default, which has lower visibility than public.




回答2:


Make methode public in the class in which interface implement,because in interface by default every method is public and abstract.



来源:https://stackoverflow.com/questions/11031562/meaning-of-cannot-reduce-the-visibility-of-the-inherited-method-with-an-interf

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!