Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Meaning of "Cannot reduce the visibility of the inherited method" with an interface

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?

like image 621
Alan2 Avatar asked Jun 14 '12 10:06

Alan2


2 Answers

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.

like image 159
jmj Avatar answered Nov 05 '22 07:11

jmj


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

like image 28
Ravi Avatar answered Nov 05 '22 07:11

Ravi