深入java(类)接口默认修饰符问题

来源:互联网 发布:短信猫 java 编辑:程序博客网 时间:2024/06/10 19:13

在深入理解java的abstract class和interface的时候,遇到过很多很小的问题,网上很多的资料给了很多帮助,对于接口的默认修饰符方面参考了一篇博文,很赞同作者自己找工具对源代码进行分析的主动进取的精神,自己积极找出路的做法。转载请注明:http://www.cnblogs.com/BaiLaowu/p/6618117.html

package test;public interface InterfaceTest {  void todo();}

/**
* 以下是反编译的内容,接口里的方法默认都是public的、abstract的。
* 并且接口也默认是abstract的。

* @author Laowupackage test;public abstract interface InterfaceTest {  public abstract void todo();}

*/
上面用得是第三方的一个反编译工具,

用 Eclipse 反编译插件编译后的结果却不同,如下:

package test;public  interface InterfaceTest {  void todo();}

接下来一探究竟:

1.创建一个java 接口:

public interface TestInterface {    void say();}

2.为这个接口添加一个abstract 修饰符

public abstract interface TestInterface {    void say();}

结果一切正常,它的实现类运行毫不影响。由此可知java接口默认就是abstract的。

3、去掉这个接口的public 修饰符

interface TestInterface {    void say();}

不报错;同包下的实现类运行正常;异包下的实现类通不过编译。由此可知java接口本身可以是friendly的。(但不可以是private 和protected 的,这和类的声明是一致的)

4.为这个接口里的一个方法添加public 修饰符

public interface TestInterface {    public void say();}

结果一切正常,它的实现类运行毫不影响。由此可知java接口里的方法默认就是public的。

5、为这个接口里的一个方法添加private 修饰符

public interface TestInterface {    private void say();}

通不过编译。由此可知java接口里的方法不可以是private 的。

6、为这个接口里的一个方法添加protected 修饰符

public interface TestInterface {    protected void say();}

通不过编译。由此可知java接口里的方法不可以是protected 的。

7、为这个接口里的一个方法添加abstract 修饰符

public interface TestInterface {    abstract void say();}

一切正常,它的实现类运行毫不影响。由此可知java接口里的方法默认就是abstract 的。

总结:

java接口本身默认是abstract的;可以是public的,也可以是friendly的,但不可以是private 的,不可以是protected的(否则通不过编译)。

java接口里的方法默认是abstract的,public 的;不可以private 的,不可以是protected 的。

   还得出一个结果,这个第三方的反编译工具更准确。下载地址:https://i.cnblogs.com/Files.aspx 文件名:javaDecompiler.rar

原创粉丝点击