JAVA:接口和抽象类的比较

概念比较

JAVA:接口和抽象类的比较_第1张图片
概念比较.png

代码层面比较

我们应该何时选用抽象类,何时使用接口呢?我们通过一个具体例子来理解一下.
比如超人Superman类继承自父类People类,People类中除了包含超人,还包含一般人、蜘蛛侠、绿巨人等,这时便可以将People类声明为一个抽象类.而超人Superman不仅是拥有People走路和跑步的功能,它还拥有一般人类没有的功能"飞",而很多东西都具有飞的功能,比如鸟飞,气球飞,飞机飞..而这些东西都抽象不出来一个公共的父类,所以就将"飞"这个功能定义为一个接口,以便其他生物如鸟去调用飞的功能.
具体代码:

// 接口:fly
public interface IFly{
    void fly();
}
// 父类:People类
public abstract class People{
  // 声明抽象方法walk()和run()
      public abstract void walk();
      public abstract void run();
}
// 子类Superman类
public class Superman extends People implements IFly{
    public void walk(){
        System.out.println("超人可以走路");
    }
    public void run(){
        System.out.println("超人可以奔跑");
    }
    public void fly(){
        System.out.println("超人可以飞");
    }
}

你可能感兴趣的:(JAVA:接口和抽象类的比较)