DESKTOP-7O1P1F7_20200825-齐元朝
问题
接口可不可以用抽象类实现?
即,有一个类(接口的实现类)实现(implement)该接口,但并没有实现或者全部实现该接口中的抽象方法?
解决
以下代码定义了某个接口:
public interface Flyable {
void fly();
void run();
default void h() {
System.out.println("我曾踏足山巅,也曾跌入低谷,二者皆使我受益良多");
}
default void p() {
System.out.println("我 曾踏足山巅,也曾跌入低谷,二者皆使我受益良多");
}
}
以下代码定义了上面接口的实现类,但没有全部实现该接口中的抽象方法
public abstract class Flytest implements Flyable {
abstract void swim(); //接口的实现类如果是抽象类,则可以在这个实现类中定义其它的抽象方法
@Override
public void fly() { //实现(重写)了接口中的fly方法
}
// public abstract void run(); //接口中的run方法没有实现,并且可以不在该实现类中显式书写
@Override
public void h() { //即使该实现类没有全部实现接口中的抽象方法,该类中也 继承 了 并且重写接口中的default修饰的方法
Flyable.super.p(); //访问接口中default修饰的方法
}
}
以下代码定义了一个启动类
public class Flytest2 extends Flytest{
@Override
public void run() { //Flyable接口的实现类的子类可以实现接口中未被实现的抽象方法,
}
void swim() {} //实现了(抽象)父类中定义的抽象方法
public static void main(String[] args) {
Flyable f=new Flytest2();
f.h();
}
}
上述启动类运行结果为:
我 曾踏足山巅,也曾跌入低谷,二者皆使我受益良多
接口的实现类可以是抽象类,并且实现接口的抽象类中,可以不显式书写接口中未实现的抽象方法,等待该抽象类的子类去实现
那么,
这个实现类的子类是不是这个接口的实现类?
接口中的抽象方法可以被实现类继承吗?
如果不能被继承,那么上述接口的实现类是抽象类,未被实现的方法,是怎么在实现类的子类中被实现的?子类并没有书写 “implement Flyable”,那么子类中这个run方法从哪来的?
点赞