7

我有两个文件:

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

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

4

2 回答 2

24

在 Java 接口中,默认情况下每个方法都是public

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

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

在实现类中,您不能通过不指定访问修饰符来降低可见性:

void print(){..}

您正在指定访问级别default,其可见性低于public

于 2012-06-14T10:54:54.763 回答
3

在实现接口的类中将方法设为公共,因为在接口中默认每个方法都是公共的和抽象的。

于 2016-06-16T11:20:47.313 回答