[b]引言:[/b]
写接口的时候,因为给方法改名的时候打了个空格,意外发现IDE提示:
那方法前到底什么时候加abstract呢?
[b]正文:[/b]
我们都知道Java接口在定义的时候,不管是名称还是成员方法,都只能用public、abstract修饰。所以,无论我们给接口名、方法带不带public都是公有的——不可选的默认为公有。
abstract见得不多,因此笔者刚瞅到的时候,还是一楞……其实同public一样,也是不可选的默认。
因此如下的两种定义,在JVM识别的时候是没任何区别(除了2可以定义在别的java文件里了 ;-0 )的:
(1)
(2)
补充(201109051308)
另外,笔者做了个测试。测试结论是:在任何名称的java文件中定义非public修饰(实际本身已是public)的接口,都将生成一个额外的以此接口名为文件名的class文件。再一次验证了上文观点。
写接口的时候,因为给方法改名的时候打了个空格,意外发现IDE提示:
Illegal modifier for the interface method talk; only public & abstract are permitted
那方法前到底什么时候加abstract呢?
[b]正文:[/b]
我们都知道Java接口在定义的时候,不管是名称还是成员方法,都只能用public、abstract修饰。所以,无论我们给接口名、方法带不带public都是公有的——不可选的默认为公有。
abstract见得不多,因此笔者刚瞅到的时候,还是一楞……其实同public一样,也是不可选的默认。
因此如下的两种定义,在JVM识别的时候是没任何区别(除了2可以定义在别的java文件里了 ;-0 )的:
(1)
public abstract interface AdultBehavior{
abstract void teachChildrenToSpeak();
void talk();
public abstract void sayHi();
}
(2)
interface AdultBehavior{
void teachChildrenToSpeak();
void talk();
void sayHi();
}
补充(201109051308)
另外,笔者做了个测试。测试结论是:在任何名称的java文件中定义非public修饰(实际本身已是public)的接口,都将生成一个额外的以此接口名为文件名的class文件。再一次验证了上文观点。