JavaSE8.0出来也蛮久了
网上也蛮多案例和教程 但大多数都写的比较复杂 而且更新的新特性也不是很齐全。
本案例是根据甲骨文官方的Demo进行修改的
授人以鱼不如授人以渔,学习方式其实也是蛮重要的。
先说说如何找到官方介绍JAVASE8.0的新特性 和入门Demo
一、下载新特性的Demo
1、打开 http://www.oracle.com/technetwork/java/javase/downloads
2、然后点击Download 进入JAVASE 8的下载界面
3、下载相应平台的Java SE Development Kit 8u112 Demos and Samples Downloads
二、学习新特性 从官方资料入手+谷歌浏览器自动翻译
官方传送门: http://docs.oracle.com/javase/8/
下面重点介绍JAVASE 8.0的新特性 接口允许定义非抽象方法
import java.lang.reflect.Method;
/**
* JavaSE 8新特性:1.接口可以定义非抽象方法 但必须使用default或者staic关键字来修饰
*/
public class DefaultMethod {
public interface Chinese {
//小结:2.JDK1.8规定只能在接口定义defult方法 且必须加Body实现
default String speak() {
return "会说普通话!";
}
//小结:3.接口的默认实现方法支持重载
default String speak(String language) {
return "会说"+language;
}
//小结:4.接口可以定义static方法
static void hehe() {
System.out.println("我不告诉你");
}
}
//小结:4.接口的default方法可以被子接口重写成default方法
public interface GuangDong extends Chinese{
@Override
public default String speak() {
return "粤语";
}
}
//小结:5.接口的默认方法还可以被子接口重写成抽象方法!!
public interface Mayun extends Chinese{
@Override
public String speak();
}
public static void main(String[] args) throws Exception{
//小结:6.如果实现类没有重写接口的默认方法,则该类直接调用接口的默认实现方法
System.out.println(new Chinese(){}.speak());
System.out.println(new Chinese(){}.speak("粤语"));
//小结:7.接口的default方法可以被子类重写成普通方法
System.out.println(new Chinese(){public String speak() {return "会说鸟语";}}.speak());
//小结:JDK1.8甚至允许直接调用接口的静态方法
Chinese.hehe();
//小结:JDK1.8 可以通过反射来 判断接口的某个方法是否为default方法
Method m =Chinese.class.getMethod("speak");
System.out.println("It is "+m.isDefault()+" that "+m.getName()+" is default method");
}
}
大概介绍到这里 更详细的Demo可以参考官方提供的案例
http://download.oracle.com/otn-pub/java/jdk/8u112-b15-demos/jdk-8u112-windows-x64-demos.zip