众所周知,在接口中定义的普通方法都是抽象方法,方法前面默认都hu会添加public abstract
,不能有方法的实现,需要在接口的实现类中对方法进行具体实现。
定义接口
public interface MyInterface{
String abstractMethod();
}
接口的实现类
public class MyInterfaceImpl implements MyInterface{
public String abstractMethod(){
return "execute abstract method";
}
}
但是jdk8开始允许在接口中定义默认方法和静态方法,对于这两种方法,可以直接在接口对其进行实现,无需在接口的实现类中进行实现。
默认方法:扩展方法,在方法前面通过default
修饰。不能直接通过接口调用,必须通过接口实现类的实例对象进行方法调用
接口实现类对象.默认方法()
静态方法:类方法,在方法前面需要通过static
修饰。可以直接通过接口调用
j接口.静态方法()
方法定义
public interface MyInterface1{
//抽象方法
String abstractMethod();
//默认方法
default String defaultMethod(){
return "MyInterface1---->defaultMethod";
}
//静态方法
static String staticMethod(){
return "MyInterface1---->staticMethod";
}
}
public interface MyInterface1Impl{
@Override
public String abstractMethod(){
return "MyInterface1Impl---->abstractMethod";
}
//静态方法
public static String staticMethod(){
return "MyInterface1Impl---->staticMethod";
}
}
方法调用
public class Demo {
public static void main(String[] args) {
MyInterface myInterface = new MyInterfaceImpl();
myInterface.abstractMethod();
myInterface.defaultMethod();
MyInterface.staticMethod();
}
}
输出结果
MyInterfaceImpl..........abstractMethod
MyInterface.................defaultMethod
MyInterface.................staticMethod
注意:如果实现类中对默认方法重写,那么调用的时候调用的是重写后的方法。