深入java(类)接口默认修饰符问题
2017-06-19 18:25
477 查看
在深入理解java的abstract class和interface的时候,遇到过很多很小的问题,网上很多的资料给了很多帮助,对于接口的默认修饰符方面参考了一篇博文,很赞同作者自己找工具对源代码进行分析的主动进取的精神,自己积极找出路的做法。转载请注明:http://www.cnblogs.com/BaiLaowu/p/6618117.html
/**
* 以下是反编译的内容,接口里的方法默认都是public的、abstract的。
* 并且接口也默认是abstract的。
*/
上面用得是第三方的一个反编译工具,
用 Eclipse 反编译插件编译后的结果却不同,如下:
接下来一探究竟:
1.创建一个java 接口:
2.为这个接口添加一个abstract 修饰符
结果一切正常,它的实现类运行毫不影响。由此可知java接口默认就是abstract的。
3、去掉这个接口的public 修饰符
不报错;同包下的实现类运行正常;异包下的实现类通不过编译。由此可知java接口本身可以是friendly的。(但不可以是private 和protected 的,这和类的声明是一致的)
4.为这个接口里的一个方法添加public 修饰符
结果一切正常,它的实现类运行毫不影响。由此可知java接口里的方法默认就是public的。
5、为这个接口里的一个方法添加private 修饰符
通不过编译。由此可知java接口里的方法不可以是private 的。
6、为这个接口里的一个方法添加protected 修饰符
通不过编译。由此可知java接口里的方法不可以是protected 的。
7、为这个接口里的一个方法添加abstract 修饰符
一切正常,它的实现类运行毫不影响。由此可知java接口里的方法默认就是abstract 的。
总结:
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中static修饰变量默认赋值问题
- 深入Java中文问题及最优解决方法
- 深入Java中文问题及最优解决方法--上
- 越深入java 就觉得java做得越烂,java设计问题 之 : 对象占用内存空间设计
- Java语言深入-构造函数的继承问题 (转)
- 越深入java 就觉得java做得越烂,java设计问题 之 : JVM缓字符串常量
- 今天的问题:一个简单的例子,请帮我解开“接口实现Java‘隐藏实现细目’”的迷惑。
- 深入JVM(2): 由一个栈溢出的问题看Java类和对象的初始化
- 深入Java中文问题及最优解决方法(2)
- 深入Java中文问题及最优解决方法(1)
- 深入Java中文问题及最优解决方法(1)
- 深入Java中文问题及最优解决方法
- Java基础问题:汉字问题深入谈
- Java基础问题:汉字问题深入谈
- JAVA中的接口和抽象类深入理解
- 深入Java中文问题及最优解决方法-下(转)
- 深入Java中文问题及最优解决方法--上
- 深入Java中文问题及最优解决方法--上
- 越深入java 就觉得java做得越烂,java设计问题 之 : 1.5 Instrumentation设计问题
- Java语言深入-构造函数的继承问题