在JDK1.8的特性中,具有最大变化的就是接口。
理解:假设一个父接口被超级多子类继承,并且子类还会被子类的子类继承……,当父接口需要添加一个方法时,因为该方法一定会在超多个子类中被覆写的,所以工作量难以想象。从JDK1.8开始,专门提供了两类新的结构:
1、 可以使用default来定义普通方法,普通方法通过对象调用;
代码示例:
interface INew{
public default void fun() {//普通方法,有方法体
System.out.println("world!");
}
public void print();//抽象方法
}
class Person implements INew{
@Override
public void print() {
System.out.println("hello!");
}
}
public class TestDemo {
public static void main(String[] args) {
INew p=new Person();
p.print();
p.fun();//实例化对象是可以调用fun()方法的
}
}
运行结果:
hello!
world!
2、 可以使用static来定义静态方法,通过接口名就可以调用。
代码示例:
interface INew{
public default void fun() {//普通方法,有方法体
System.out.println("world!");
}
public static INew getInstance() {//定义静态方法
return new Person();
}
public void print();//抽象方法
}
class Person implements INew{
@Override
public void print() {
System.out.println("hello!");
}
}
public class TestDemo {
public static void main(String[] args) {
INew p=INew.getInstance();//静态方法可以由类名称直接调用了
p.print();
p.fun();//实例化对象是可以调用fun()方法的
}
}
运行结果:
hello!
world!
从以上的代码可以看出,接口更像抽象类了,但是它更强大,因为接口的子类依然可以实现多继承的关系。但是抽象类只能单继承。(但是实际开发中接口定义的增强特性应用的不多)