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();
}

}