一、接口中的默认方法
在jdk8之前,在接口interface中是不能写默认方法的,都只能是抽象方法,当这个接口有多个实现类的时候,在接口中新增一个抽象方法,则每个实现类都要实现该方法,不利于扩展。
而默认方法可以写在接口中,并且有方法体,不用每个实现类都去实现,实现类可以直接调用或者重写:
1.接口中默认方法使用方式一:实现类直接调用:
class Defaultfun {
public static void main(String[] args) {
AA aa = new AA();
aa.test01();
}
}
interface interfaceDefault {
public default void test01() {
System.out.println("我是接口中的默认方法。。。");
}
;
}
class AA implements interfaceDefault {
}
运行结果如下:
我是接口中的默认方法。。。
2.接口中默认方法使用方式二:重写
当默认方法觉得默认方法不太行的时候也可以去重写,自己实现:
class Defaultfun {
public static void main(String[] args) {
// AA aa = new AA();
// aa.test01();
BB bb = new BB();
bb.test01();
}
}
interface interfaceDefault {
public default void test01() {
System.out.println("我是接口中的默认方法。。。");
}
;
}
class BB implements interfaceDefault {
@Override
public void test01() {
System.out.println("BB 类实现接口中的默认方法");
}
}
二、接口中的静态方法
将默认方法的修饰符defualt改为statis即可
public class interfaceStatisFun {
public static void main(String[] args) {
// 接口中的静态方法直接使用接口名调用即可,无法重写和实现类调用的
AAA.test01();
}
}
interface AAA {
public static void test01(){
System.out.println("我是接口中的静态方法");
}
}
class BBB implements AAA{
}
三、接口中的默认方法和静态方法的比较
1.默认方法通过实例调用,静态方法通过接口名调用;
2.默认方法可以被继承,实现类可以直接调用默认方法,也可以重写该默认方法;
3.静态方法不能被继承,实现类也不能重写,只能通过接口名直接调用
四、如何选择写默认方法还是静态方法呢?
如果这个方法需要被继承,或者实现,则写成默认方法,如果接口中的方法不需要继承或重写则使用静态方法。