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 关系,接口与实现类的关系只是定义了行为,本质上并无实质关系,只是契约层面的关系。  

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wpfpxz.html