Java中由常量类引发的思考
2017-08-16 17:55
197 查看
我们都知道,定义一个常量类是十分简单的。首先差固件一个类,然后类中声明一些public修饰的静态常量。没错就这么简单:
写好之后,在其他地方使用的时候,直接类名.属性名就可以使用了。
而LZ现在想的是能不能换一种方式来写,实际效果是一样的,但逼格会不会高点呢?仁者见仁智者见智啦:
大家会发现,不就是类改成了接口了吗?然后常量的public static final修饰去掉了吗?对,没错就是这样。个人觉得逼格高点,同时也可以反映出开发人员的技术水平。那么我们来看一下为什么会等同。我们将次接口编译之后再反编译出来,也许大家就会发现,奥,原来是这样的。
通过反编译的结果看到,接口变成了抽象接口,属性都变成了public static final修饰。方法都变成了public abstract修饰。那么我们总结一下:接口中可以含有 变量和方法。但是要注意,接口中的变量会被隐式地指定为public static final变量(并且只能是public static final变量,用private修饰会报编译错误),而方法会被隐式地指定为public abstract方法且只能是public abstract方法(用其他关键字,比如private、protected、static、 final等修饰会报编译错误),并且接口中所有的方法不能有具体的实现,也就是说,接口中的方法必须都是抽象方法。从这里可以隐约看出接口和抽象类的区别,接口是一种极度抽象的类型,它比抽象类更加“抽象”,并且一般情况下不在接口中定义变量。
写好之后,在其他地方使用的时候,直接类名.属性名就可以使用了。
而LZ现在想的是能不能换一种方式来写,实际效果是一样的,但逼格会不会高点呢?仁者见仁智者见智啦:
大家会发现,不就是类改成了接口了吗?然后常量的public static final修饰去掉了吗?对,没错就是这样。个人觉得逼格高点,同时也可以反映出开发人员的技术水平。那么我们来看一下为什么会等同。我们将次接口编译之后再反编译出来,也许大家就会发现,奥,原来是这样的。
通过反编译的结果看到,接口变成了抽象接口,属性都变成了public static final修饰。方法都变成了public abstract修饰。那么我们总结一下:接口中可以含有 变量和方法。但是要注意,接口中的变量会被隐式地指定为public static final变量(并且只能是public static final变量,用private修饰会报编译错误),而方法会被隐式地指定为public abstract方法且只能是public abstract方法(用其他关键字,比如private、protected、static、 final等修饰会报编译错误),并且接口中所有的方法不能有具体的实现,也就是说,接口中的方法必须都是抽象方法。从这里可以隐约看出接口和抽象类的区别,接口是一种极度抽象的类型,它比抽象类更加“抽象”,并且一般情况下不在接口中定义变量。
相关文章推荐
- Java包命名规则引发的思考
- 由一道 Java finally 执行顺序的题引发的思考
- 一道有关Java null笔试题引发的思考
- JAVA注解引发的思考
- JAVA注解引发的思考
- 由java.lang.OutOfMemoryError:java heap space引发的关于JVM优化的思考
- Java中对变量范围转换引发的思考
- 2012华为机试第三题引发的关于“java传值,传引用”思考
- IKM 某java题引发的思考,求大神指点?? Integer和普通的Object的区别
- 性能测试java协议使用httpclient方法引发的思考
- JAVA-OPTS引发的思考
- 再议Java/Android回调——由一段Bmob查询操作引发的思考
- MyEclipse内存不足之JVM内存浅谈 JAVA-OPTS引发的思考
- java complier compliance level问题引发的思考
- 一个JDK版本问题引发的思考--Java环境配置 && Eclipse的JDK配置
- 关于“JAVA中为什么没有了多继承并出现了接口”这一问题引发的一些思考
- 性能测试java协议使用httpclient方法引发的思考
- java运维: 一次线上问题排查所引发的思考
- java complier compliance level问题引发的思考
- 由JAVA参数传递引发的对引用的思考