1.接口默认方法:
背景:jdk1.8之前,接口不能写任何实例方法(静态方法和静态常量可以写),但是假设一个接口类被大量的类所实现,那么一旦接口新增加了一个方法,那么实现类都需要实现这个方法;再加上函数式接口规定一个接口中只能有一个抽象方法,这两点原因使得jdk引入了默认方法;
2.接口常见的注意事项
package com.ydlclass.feature;
import org.junit.Test;
public interface JDKFeature { public static final int num = 1;//接口可以定义静态常量,静态方法,默认就是静态的所以可以省略 public static void eat(){} int num2 = 1; static void have(){}//默认是public
//void say(){};//不能有实例方法和实例属性
void say1();//只能有抽象方法,留给子类去实现
//jdk1.8之后就可以放默认方法,子类可以直接继承
default void say2(){
System.out.println("hello");
}
static class Dog implements JDKFeature{
@Override
public void say1() {
System.out.println("helloSay");
}//包括这个静态内部类的static关键字都可以省略
@Override//默认方法也可以被重写
public void say2() {
JDKFeature.super.say2();
}
}
public static void main(String[] args) {
Dog dog = new Dog();
dog.say1();
dog.say2();
}
}