type
status
date
slug
summary
tags
category
icon
password
Property
在抽象类中,抽象方法本质上是定义接口规范:即规定高层类的接口,从而保证所有子类都有相同的接口实现,这样,多态就能发挥出威力。
如果一个抽象类没有字段,所有方法全部都是抽象方法:
就可以把该抽象类改写为接口:
interface
在Java中,使用
interface
可以声明一个接口:所谓
interface
,就是比抽象类还要抽象的纯抽象接口,因为它连字段都不能有。因为接口定义的所有方法默认都是
public abstract
的,所以这两个修饰符不需要写出来(写不写效果都一样)当一个具体的
class
去实现一个interface
时,需要使用implements
关键字:在Java中,一个类只能继承自另一个类,不能从多个类继承。但是,一个类可以实现多个
interface
:抽象类和接口的对比如下:
接口继承
一个
interface
可以继承自另一个interface
。interface
继承自interface
使用extends
,它相当于扩展了接口的方法。例如:此时,
Person
接口继承自Hello
接口,因此,Person
接口现在实际上有3个抽象方法签名,其中一个来自继承的Hello
接口。继承关系
合理设计
interface
和abstract class
的继承关系,可以充分复用代码。一般来说,公共逻辑适合放在abstract class
中,具体逻辑放到各个子类,而接口层次代表抽象程度。可以参考Java的集合类定义的一组接口、抽象类以及具体子类的继承关系:在使用的时候,实例化的对象永远只能是某个具体的子类,但总是通过接口去引用它,因为接口比抽象类更抽象:
default方法(JDK>=1.8)
在接口中,可以定义
default
方法。例如,把Person
接口的run()
方法改为default
方法:实现类可以不必覆写
default
方法。default
方法的目的是,当我们需要给接口新增一个方法时,会涉及到修改全部子类。如果新增的是default
方法,那么子类就不必全部修改,只需要在需要覆写的地方去覆写新增方法。default
方法和抽象类的普通方法是有所不同的。因为interface
没有字段,default
方法无法访问字段,而抽象类的普通方法可以访问实例字段。