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

vir*_*ren 8 java

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

请给我一个想法,为什么在java源代码中这样写.

public abstract void run();
Run Code Online (Sandbox Code Playgroud)

谢谢

mdm*_*dma 14

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

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

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


And*_*s_D 9

java语言规范:

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

接口主体中的每个方法声明都是隐式公开的.

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

作为一种风格问题,允许冗余地指定接口方法的公共修饰符.

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


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

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

  • 羞辱你andreas_d!:) (2认同)