javaSE-接口&抽象类

1.接口和抽象类的异同

1-1.interface && abstract class

不能实例化

  1. 抽象类和接口都不能够实例化,但可以定义抽象类和接口类型的引用。

抽象方法

  1. 有抽象方法的类必须被声明为抽象类或者接口,而抽象类未必要有抽象方法。

继承和实现

  1. 接口的实现类可以被直接实现多个接口,抽象类的子类只能被直接继承一个抽象类
  2. 一个类如果继承了某个抽象类或者实现了某个接口都需要对其中的抽象方法全部进行实现,否则该类仍然需要被声明为抽象类。

抽象

  1. 接口比抽象类更加抽象,因为抽象类中可以定义构造器,可以有抽象方法和具体方法,而接口中不能定义构造器而且在1.8以前的的方法全部都是抽象方法。

访问限定

  1. 抽象类中的成员可以是private、默认、protected、public的,而接口中的成员都是public的。

属性

  1. 抽象类中可以定义成员变量,而接口中定义的成员变量实际上都是常量。

1-2.注意!接口在1.8以后新特性:

default
  1. 可以定义default 普通实现方法(可以被继承,但是同时实现两个同样default接口时,default必须被重写)
  2. 如果子类继承父类,父类中有b方法,该子类同时实现的接口中也有b方法(被default修饰),那么子类会继承父类的b方法而不是继承接口中的b方法
  3. 使用接口中类型时,仅仅需要实现抽象方法,default、static方法不需要强制自己实现类去再次实现

  4. 非default、static方法不能有实现,否则编译错误:Abstract methods do not specify a body

  5. default、static方法必须有具体的实现,否则编译错误:This method requires a body instead of a semicolon
  6. 可以拥有多个default方法
  7. 可以拥有多个static方法
static

java8中为接口新增了一项功能:定义一个或者更多个静态方法。

类似于类中的静态方法,接口定义的静态方法可以独立于任何对象调用。

所以,在调用静态方法时,不需要实现接口,也不需要接口的实例,也就是说和调用类的静态方法的方式类似。

语法如:接口名字.静态方法名。

注意,实现接口的类或者子接口不会继承接口中的静态方法.