「这是我参与11月更文挑战的第11天,活动详情查看:2021最后一次更文挑战」
接口
1.接口中可以有方法体:使用default 和 staic 修饰的方法必须有实现类.
2.接口的普通方法默认且必须使用是抽象的
3.接口可以继承多个接口.但是如果父类有同名默认方法,需要重写.
public interface animals {
default void eat() {
System.out.println("动物吃饭");
}
}
public interface people {
default void eat() {
System.out.println("人吃饭");
}
}
为什么接口要有默认方法defalut?
当接口需要增加一个方法,那么所有它的实现类都需要实现这个方法,改动会很大.
使用defalut修饰后,默认所有实现类都实现了这个方法,对于需要实现这个方法的实现类可以重写这个方法.当接口需要增加一个新的方法时,就不需要实现该接口的实现类都要实现这个方法,只针对需要的实现类进行重写即可.
为什么java只支持单继承,而接口可以多继承?
1.如果实现类可以多继承.那么有两个子类C,B继承了同一个父类A,而又有一个子子类D继承了两个子类.那么子类就需要继承三个同名的方法.这时候他该选择哪个?重写吗?
jdk1.8后接口的default默认方法有一点多继承的味道,也会出现多继承的选择问题,需要重写实现.
2.由于接口主要的功能是规范定义,极少有承担实现的功能.因此如果方法重名,实际上可以认定为同一种规范,而不是多种具体内容.
接口中有实现方法吗/接口中的方法都是抽象的吗?
不! 接口中有实现方法:使用static修饰或者defalut修饰的都是有方法体的.
实现类/子接口不用实现这两种方法.默认实现.
静态方法不可以被重写