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方法从哪来的?

标签

© 2021 成都云创动力科技有限公司 蜀ICP备20006351号-1