为什么在runnable接口中运行使用abstract关键字定义的方法

时间:2010-07-20 12:15:11

标签: java

这个问题可能很愚蠢,但我不小心检查了java源代码,runnable接口中的run方法是用abstract关键字定义的。 但是根据接口定义,接口中的所有方法都是默认的抽象。 然后我很困惑为什么特殊的Runnable接口有run方法的抽象关键字。 我检查其他界面,如地图,列表等,但没有人有抽象关键字。

请让我知道为什么在java源代码中这样写。

public abstract void run();

由于

5 个答案:

答案 0 :(得分:14)

'public'声明也是多余的,因为默认情况下所有符号在接口中都是公共的。

这可能是出于习惯而写的。我认为Runnable是JDK 1.0中构思的第一批接口之一,而那时,接口的声明默认值可能还没有完全灌输到JDK开发人员的脑海中。我记得在接受James Gosling的采访时读到,在Oak中,Java的项目名称,曾经没有接口,只有像C ++这样的抽象类,这可能是一个宿醉。

我有时也会为接口方法和常量编写“public”,尽管没有必要。

答案 1 :(得分:9)

来自java language specification

  

正文中的每个方法声明   接口是隐含的   摘要,所以它的身体永远   用分号代表,而不是分号   块。

     

正文中的每个方法声明   接口是隐式公开的。

     

与旧版本兼容   Java平台是允许的   但作为一种风格,沮丧   冗余地指定摘要   声明的方法的修饰符   接口

     

允许,但强烈   因为风格而气馁   冗余地指定公众   接口方法的修饰符。

嘿,刚刚得知我的界面声明风格不好,因为我总是使用public修饰符。


apache Harmony只是添加了公共修饰符( uuuh - bad style!)。 SUN Oracle有两个修饰符?我想这是因为在'旧版本'中必须添加abstract修饰符 - 只是因为JLS提到了“与旧版本的兼容性”。

然后:永远不要更改Runnable系统: - )

答案 2 :(得分:1)

接口中的所有方法都是公共的和抽象的,但实际上并不需要使用关键字来指定它。它将自动为您完成。你可能只有void run(),这意味着同样的事情。

答案 3 :(得分:0)

在Java源代码中这样写的原因是因为它被作者忽略了。

定义:

public abstract void run();

与定义完全相同:

public void run();

在界面中。这只是一种风格问题。 Java接口中的首选样式是在没有公共和抽象关键字的情况下定义接口方法。

请注意,接口中这两个方法定义之间的功能没有区别。

答案 4 :(得分:-1)

这似乎是一个毫无意义的问题。至少这是一个毫无意义的问题。你需要问作者。他可能回答“谁在乎?”