使用接口“无法降低继承方法的可见性”的含义

时间:2012-06-14 10:53:18

标签: java interface access-specifier

我有两个文件:

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;   
}

我认为代码看起来没问题,但我在第void print(PrintDetails details) {行的第二个文件中收到错误消息:

  

无法从PrintService降低继承方法的可见性。

有人可以解释这对我意味着什么吗?

2 个答案:

答案 0 :(得分:22)

在Java界面中,每个方法默认为public

  

接口主体中的每个方法声明都是隐式抽象的,因此它的主体总是用分号表示,而不是块。

     

接口主体中的每个方法声明都是隐式公开的。 [..]

在实现类中,不允许降低可见性,也不允许指定访问修饰符:

void print(){..}

您指定的访问级别default的可见性低于public

答案 1 :(得分:3)

在接口实现的类中使methode公开,因为在接口默认情况下每个方法都是public和abstract。