您的位置:首页 > 编程语言 > Java开发

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

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

package test;

public interface InterfaceTest {
  void todo();
}


/**

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

* 并且接口也默认是abstract的。

* @author Laowu

package 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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java 源代码