抽象父类的一个典型使用场景
抽象父类的一个经典的使用场景是为接口的实现类提供默认的实现,这样,接口的实现类就不用每一个都去实现一遍全套的接口所定义的方法。
默认方法
接口的默认方法的提出很大一部分目的就是为了顶替掉上述的抽象父类的这个经典使用场景。
在 JDK 8 中,default 关键字用在接口中,用来修饰非抽象的方法,称为『默认方法』 ( default method ) 。
public interface InterfaceA {
default void testMethod(); // compile error! 会提示:Extension method should have a body.
// 默认方法一
default void print() {
System.out.println("InterfaceA: an ordinary method.");
}
// 默认方法二
default String getName() {
return "InterfaceA";
}
}
首先,default 关键字用在接口中,用来修饰方法;
其次,该方法不能使抽象方法,即必须是一个已经有了实现的方法,称为默认方法;
最后,同一个接口内,可以有多个默认方法。
静态方法
在 Java 8 中,你可以为接口添加静态方法。 从技术的角度来说,这是完全合法的。只是它看起来违反了接口作为一个抽象对象的理念。
public interface InterfaceA {
...
static void sayHello(String name) {
System.out.println("InterfaceA: hello " + name);
}
}
特性 1:静态方法不可被重写 (即 @Override) ,会编译报错:Method does not override method from its superclass;
特性 2:同一个实现类实现多个接口,允许这多个接口中声明同名的静态方法;
特性 3:调用方式只有一种:接口名.静态方法,eg: InterfaceA.sayHello("susu");。