jdk8下的接口和抽象类

接口

在java8中,接口可以定义变量和方法,其中变量必须为 public && static && final;
方法必须为public && (abstract || default || static)。
jdk8只能通过接口类调用接口中的静态方法,但是对于default方法来说,如果两个接口中定义了相同方法签名的default方法,且实现类同时继承了两个接口。则在编译时会报错。此时可以让实现类重写该方法。

抽象类

包含一个或多个抽象方法的类,必须被申明为抽象类。
但不是抽象类中所有的方法都是抽象方法,除了抽象方法外,抽象类还可以拥有具体的方法以及具体数据
一个类如果继承一个抽象类,必须实现该抽象类里声明的抽象方法

区别 抽象类 接口
继承/实现 只允许继承单个抽象类,可以不实现所有的抽象方法,但是子类也必须申明为抽象类 可以继承多个接口,但继承的类必须实现所有接口的所有抽象方法
变量 可以有具体的变量 只能有静态常量 public static final
方法 抽象类的方法可以是public,protected,default,但是不允许private 接口的方法必须是public,可以有抽象abstract,默认defualt,静态static
构造函数 拥有默认构造函数 无构造函数
子类实现 Extends Implment
设计理念和使用场景 是对同一个类型下共有的特性抽象。抽象类是一种 自下而上 的设计,先有了子类,然后提取子类公有的特性与行为,构成抽象类。 抽象类与子类是 is-a 关系,父类和派生的子类在概念上是相同的,存在的是父子关系,是一种重耦合。 它定义了一种规范,更多的是辐射类型的设计。接口是一种 自上而下 的设计,先规定行为方法,然后由类去实现这些行为,就可以成为接口的实现类。接口与实现类是 like-a 关系,接口与实现类的关系只是定义了行为,本质上并无实质关系,只是契约层面的关系。