是抽象的必须与否?

时间:2012-03-29 14:01:25

标签: java interface

如您所知,在java界面中,所有方法都必须定义为抽象。但是当我将方法定义为不键入abstract时,编译器说它没关系。我知道抽象方法不能有一个体。接口中的某个方法是否必须具有名称abstract? :我的意思是,有什么区别:

public interface blabla {

    public void aMethod();


    //or

    public abstract void aMethod();

}

8 个答案:

答案 0 :(得分:7)

不,将接口方法标记为abstract没有任何意义,也绝不需要。

所有接口方法都是隐式abstract(而public也是btw)。

来自JLS:

  

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

     

界面正文中的每个方法声明都是隐式公开

     

为了与旧版本的Java平台兼容,允许但不鼓励,但为了风格,不要为接口中声明的方法冗余地指定抽象修饰符

     

允许,但强烈建议不要在样式方面为冗余指定接口方法的公共修饰符。


相关问题(+回答时有一条陈述的历史参考说明曾经需要 abstract

答案 1 :(得分:2)

请参阅下面的示例示例

interface xyz
{
void methodA();
}

将此保存到xyz.java

现在使用 javac 工具

进行编译

然后使用给定的命令belo

javap xyz

输出将是

Compiled from "xyz.java"
interface xyz {
    public abstract void methodA();
}

这意味着当您编译接口时,编译器默认将其签名设置为 public abstract

因此,没有必要对任何接口方法使用 abstract 关键字。

答案 2 :(得分:0)

我不知道他们必须被定义为抽象。可能是因为他们没有。请参阅Oracle's tutorial

答案 3 :(得分:0)

接口的方法不必明确定义为抽象,因为它们是Java Language Specification §9.4中定义的隐式abstractpublic。冗余声明完全合法。

答案 4 :(得分:0)

你不需要指定abstract(默认),因为在接口中它没有意义,因为接口的所有方法都需要实现

答案 5 :(得分:0)

根据定义,接口中的所有方法都是抽象的。

您无法从界面中创建对象(例如,使用Interface i = new Interface();),因此将方法标记为抽象与否之间没有区别。

任何实现接口的类都需要决定是实现它还是让子类来实现它。因此,就接口而言,默认情况下所有方法都是抽象的。

答案 6 :(得分:0)

抽象方法不提供任何实现。具有抽象方法的类必然是抽象的,这意味着您无法创建此类的实例。要创建该类的实例,您需要为抽象方法创建子类并提供非抽象覆盖。

接口永远不会提供其方法的实现,也无法实例化。因此,接口的每个方法都是按定义抽象的。在接口中声明方法时,不需要提供关键字abstract。按照惯例,关键字abstract不在界面中使用。

答案 7 :(得分:0)

如果忘记在interface方法之前放置abstract关键字,Java会隐式地将public abstract关键字放在它之前。因为所有接口方法都必须是抽象的。