接口和抽象类的区别
说明:所有的对象都是通过类来描述的。但是类并不都是用来描述对象的,例如 抽象类
abstract 抽象类
可以有自己的成员变量,也可以有非abstract的成员方法
interface 接口(特殊的抽象类)
只能有静态的不能被修改的成员变量(static final)
所有的方法都是abstract的
解释: is-a 和 like-a
例如:定义一个Door的抽象类,应具有open()和close()方法,和一个特殊方法alarm()报警器
AlarmDoor 实际上是一个门 (is-a 的关系)
同时又具有alarm的功能(like-a的关系)
abstract class Door{
abstract void open();
abstract void close();
}
interface class Alarm{
void alarm();
}
public class AlarmDoor extends Door implements Alarm{
void open(){...}
void closr(){...}
void alarm(){...}
}
abstract | interface |
---|---|
1.表示继承关系,一个类只能使用一次继承, | 1.可实现多个接口 |
2.可以有自己的成员变量,也可以有非抽象方法, | 2.只能有静态的、不能被修改的成员变量,所有方法都是抽象的 |
3.是 is-a 的关系, | 3.是like-a的关系 |
4.实现抽象类必须实现其所有抽象方法,抽象类可以有非抽象方法,可以private修饰(但是不建议) | 4.接口中不能有实现方法,JDK1.8以后可以有default实现方法 |
5.成员变量是friendly类型,可以重新定义和修改, | 5.成员变量必须是public static final修饰,且必须有初始值,所以实现类中不能重新定义和修改 |
6.接口类的方法必须是public abstract修饰的 | |
拥有构造函数 | 接口没有构造函数 |
不可以通过new实例化 ,但可以通过匿名内部类实例化 | 不可以通过new实例化,但可以通过匿名内部类实例化 |