抽象类(abstract class)和接口(Interface)的区别

1.定义方法的关键字

抽象类 abstract 为了把相同的东西提取出来,即重用
public abstract class Animal {   
}
接口 Interface为了把程序模块进行固化的契约,是为了降低偶合
public interface Food {
}

2.概念

抽象类:
如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类
接口:
接口并不是类,接口包含类要实现的方法。除非实现接口的类是抽象类,否则该类要定义接口中的所有方法。

3.成员变量

抽象类
抽象类中的成员变量可以是各种类型的:

private String name;变量
int x=45;常量
public static String y = "动物";全局常量

而接口中的成员变量只能是 public static final 类型的且必须给其初值.

public static final String name = "";

4.构造方法

抽象类可有构造方法

public abstract class Animal {
    private String name;
    int x=45;
    public static String y = "动物";

    public Animal(String name, int x) {
        this.name = name;
        this.x = x;
    }
}

接口不能有构造方法

5.权限

抽象类可以是各种权限:private protected public
接口只能是:public

6.成员方法

抽象类可以有普通方法抽象方法
Abstract关键字同样可以用来声明抽象方法
抽象方法只包含一个方法名,而没有方法体。
抽象方法没有定义,方法名后面直接跟一个分号,而不是花括号。
抽象方法子类必须实现

public abstract class Animal {
    public void helloworld(){
        System.out.println("hello world");
    }
    public abstract double computePay();
}

接口可以有抽象方法默认方法

public interface Food {
    public abstract double computePay();
    //因为在接口中 public是默认的可以省略,abstract也可以省略 不是default方法就是抽象方法
//即 double computePay();
    default void f() {//java8增加的 默认方法子类可以选择不实现
      System.out.println("start...");
  }
}

7.子类使用

抽象方法是关键字extends继承一个抽象类
接口是关键字implements实现多个接口

8.关系

一个抽象类可以实现多个接口
一个接口不能继承抽象类,但可以继承多个接口

9.局限

抽象类只能单继承。子类继承了这个抽象类,就不能继承其他的了
接口可以多继承即子类可以实现多个接口
所以:抽象类和接口全部都可以使用的时候优先考虑接口,因为接口没有单继承局限性

总结

区别 抽象类abstract 接口interface
定义语法 abstract class 类名称 interface接口名称
组成 常量,全局常量,变量,构造方法,普通方法,抽象方法 全局常量,抽象方法,默认方法
权限 可以是各种权限 都是public权限
使用 子类通过extend继承一个抽象类 子类通过implements实现多个接口
关系 一个抽象类可以实现多个接口 一个接口不能继承抽象类,但可以继承多个接口
局限 只能单继承 可以多继承

你可能感兴趣的:(抽象类(abstract class)和接口(Interface)的区别)