JDK8之前的接口中只有抽象方法,但是上课过程中我了解到在此之后java进行了一些更新,于是写在这篇文章中记录。
接口体中的default方法:
JDK8版本开始允许使用default关键字,在接口体中定义称作default的实例方法(但要注意不能定义default的static方法),简单来理解就是在接口中提供一个不需要子类实现的默认实现方法,值得注意的是default方法是可以被子类重写的,也可以在接口中定义定义多个default方法。
eg.
interface Com {
public final int MAX = 100;
public abstract void add();
public abstract float sum(float x ,float y);
public default int max(int a,int b) { //default方法
return a>b?a:b;
}
}
接口体中的static方法:
同样地,在JDK8版本开始,允许在接口体中定义static方法。这个就不需要多说了,
eg.
public interface Com {
public static final int MAX = 100;
public abstract void on();
public abstract float sum(float x ,float y);
public default int max(int a,int b) {
return a>b?a:b;
}
public static void f() { //static方法
System.out.println("注意是从Java SE 8开始的");
}
}
另外从JDK9开始还允许在接口体中定义private方法,目的就是配合default方法将某些算法封装在private方法中,供default的实例方法调用,实现算法复用,不过这个目前对我不是很有用,就不举例了。
抽象对象和接口相似性叙述:
其实接口和抽象类很像,除了多继承以外甚至功能都是基本一样的,比如上转型对象其实就跟接口的回调是一个意思,上转型:father f=new son();接口回调:inter obj=new()implecom。
lambada表达式:
lambada表达式也是jdk8后的一个更新,主要用在单接口,也就是接口中只有一个抽象方法的时候。
eg.
interface ShowMessage {
void 显示商标(String s);
}
public class Example6_3 {
public static void main(String args[]) {
ShowMessage sm; //声明接口变量。
sm=(s)->{ //接口变量中存放Lambada表达式的值。
System.out.println("tvtvtvtv");
System.out.println(s);
System.out.println("tvtvtvtv");
};
sm.显示商标("长城牌电视机"); //接口回调Lambada表达式实现的接口方法。
sm=(s)->{ //接口变量中存放Lambada表达式的值
System.out.println("pcpcpcpc");
System.out.println(s);
System.out.println("pcpcpcpc");
};
sm.显示商标("华为个人电脑"); //接口回调Lambada表达式实现的接口方法。
}
}
其实上述lambada表达式的原型是这样的:
class A implement ShowMessage {
public void 显示商标(String s){
System.out.println("pcpcpcpc");
System.out.println(s);
System.out.println("pcpcpcpc");
}
}
其实lambada表达式就是一种简写,算是一种语法而不是新的方法。