2012-06-14 45 views
6

我有兩個文件:意義「不能減少繼承方法的可見性」與接口

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) {的第二個文件中的錯誤指出:

無法降低從繼承的方法的可見性。

有人能解釋這對我意味着什麼嗎?

回答

21

在Java接口的每個的方法是通過默認public

在接口的身體的每個方法聲明是隱式抽象的,所以其主體由分號,而不是一個塊總是表示。

接口主體中的每個方法聲明都是隱式公開的。 [..]

在一個實現類,你都不能降低能見度,並且不指定訪問修飾符:

void print(){..} 

您指定的訪問級別default,它具有比public能見度低。

2

使方法在接口實現類中公開,因爲默認情況下接口中的每個方法都是公共的和抽象的。