这个问题可能很愚蠢,但我不小心检查了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",尽管没有必要.
从java语言规范:
接口主体中的每个方法声明都是隐式抽象的,因此它的主体始终用分号表示,而不是块.
接口主体中的每个方法声明都是隐式公开的.
为了与旧版本的Java平台兼容,允许但不鼓励,但作为一种风格,不要为接口中声明的方法冗余地指定抽象修饰符.
作为一种风格问题,允许冗余地指定接口方法的公共修饰符.
嘿,刚刚得知我的界面声明是坏的风格,因为我总是使用public修饰符.
apache Harmony只是添加了public修饰符(uuuh - bad style!).SUN Oracle有两个修饰符吗?我想这是因为在'旧版本'中必须添加abstract修饰符 - 只是因为JLS提到'与旧版本的兼容性'.
然后:永远不要改变Runnable系统 :-)
| 归档时间: |
|
| 查看次数: |
3489 次 |
| 最近记录: |