接口的注意事项

137 阅读2分钟

「这是我参与11月更文挑战的第11天,活动详情查看:2021最后一次更文挑战

接口

1.接口中可以有方法体:使用defaultstaic 修饰的方法必须有实现类.

2.接口的普通方法默认且必须使用是抽象的

3.接口可以继承多个接口.但是如果父类有同名默认方法,需要重写.

public interface animals {
    default void eat() {
        System.out.println("动物吃饭");
    }
}

public interface people {
    default void eat() {
        System.out.println("人吃饭");
    }
}

image.png

为什么接口要有默认方法defalut?

当接口需要增加一个方法,那么所有它的实现类都需要实现这个方法,改动会很大.

使用defalut修饰后,默认所有实现类都实现了这个方法,对于需要实现这个方法的实现类可以重写这个方法.当接口需要增加一个新的方法时,就不需要实现该接口的实现类都要实现这个方法,只针对需要的实现类进行重写即可.

为什么java只支持单继承,而接口可以多继承?

image.png

1.如果实现类可以多继承.那么有两个子类C,B继承了同一个父类A,而又有一个子子类D继承了两个子类.那么子类就需要继承三个同名的方法.这时候他该选择哪个?重写吗?

jdk1.8后接口的default默认方法有一点多继承的味道,也会出现多继承的选择问题,需要重写实现.

2.由于接口主要的功能是规范定义,极少有承担实现的功能.因此如果方法重名,实际上可以认定为同一种规范,而不是多种具体内容.

接口中有实现方法吗/接口中的方法都是抽象的吗?

不! 接口中有实现方法:使用static修饰或者defalut修饰的都是有方法体的.

实现类/子接口不用实现这两种方法.默认实现.

静态方法不可以被重写