2017-11-11 240 views
4

我有基本接口:Java要求執行默認方法

public interface Doable { 
    void doAction(String str); 
} 

我已經擴展接口:

public interface DoubleDoable extends Doable{ 
    @Override 
    default void doAction(String str) { 
     doOnce(); 
     doOnce(); 
    } 

    void doOnce(); 
} 

而且我有一個實現:

public class Action implements DoubleDoable { 
    public void doOnce() { 
     System.out.println(123); 
    } 
} 

但是,它不是編爲:Error:(10, 8) java: Action is not abstract and does not override abstract method doAction(java.lang.String) in Doable

我做錯了什麼?

+4

我假設你的方法沒有被稱爲'do',因爲這是Java中的保留關鍵字。 –

+2

一旦你把名字改成別的東西,你會沒事的。 –

+0

在Java 8中編譯得很好。只需要使用'do'以外的方法名稱。 –

回答

2

如果您使用的是Java 8編譯器,則代碼可能導致編譯錯誤的唯一方法是,如果傳遞給編譯器的-source標誌的值設置爲1.7或更低。

喜歡的東西:

javac -source 1.7 ... 

如果你正在使用maven,物業下方設置將具有相同的效果。

<maven.compiler.source>1.7</maven.compiler.source> 
0

您不能調用方法do,因爲它是java保留字。所有Java關鍵字列表,您可以找到here

+0

@Aominè變了。我的意思是給它的名字。改變。 – icarumbas

+0

這只是一個例子,對於這個不好用 –

+0

這意味着Java的保留關鍵字不能用於命名方法或變量 –