2017-11-11 229 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的保留关键字不能用于命名方法或变量 –