深入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
- 深入java(类)接口默认修饰符问题
- Java接口中属性和方法的默认修饰符
- Java接口成员变量和方法默认修饰符
- Java 默认修饰符
- Java 默认修饰符
- java默认修饰符
- Java默认修饰符
- java中接口的属性、方法的默认修饰符和类的属性、访问修饰符的区别
- java中接口的属性、方法的默认修饰符和类的属性、访问修饰符的区别
- Java 默认修饰符 总结
- Java 默认修饰符 总结
- Java修饰符、抽象类、接口
- 黑马程序员-Java面向对象II(抽象类、接口、参数传递修饰符和内部类问题)
- java接口中的修饰符
- Java接口修饰符详解
- Java接口修饰符详解。
- java中抽象类与接口中方法访问修饰符问题
- java中抽象类与接口中方法访问修饰符问题
- Java并发编程:volatile关键字解析
- JAVA垃圾回收详解(算法篇)
- Java开发中的23种设计模式详解----组合模式(Composite)
- 使用spring mvc Controller中使用@Value无法获取属性值
- Linuxg++编译C++代码出错 -std=c++11 or -std=gnu++11
- 深入java(类)接口默认修饰符问题
- 值得经常逛的一些网站
- iOS 布局篇(一)-NSLayoutConstraint的使用和 VFL 语言介绍
- word search
- 股票市场
- rpm查询安装包命令集合
- scala学习笔记(二)
- Java常用的数据库连接池【c3p0】【dbcp】
- swift public、internal和private 关键字