区别:
1、抽象类代表的是“is-a”的关系,接口所代表的是"like-a"的关系。
2、接口实际上是一个特殊的抽象类。
3、抽象类可以有抽象方法,也可以有实例方法
接口中所有的方法都是公开抽象方法
4、具体类使用抽象类,用extends(继承)
具体类使用接口,用implements(实现)
5、具体类实现接口,必须重写接口中的所有方法!
6、抽象类可以有自己的构造方法,接口不能有构造方法
举例:
抽象类:
abstract class Door { public abstract void open(); public abstract void close(); }
接口:
interface Door{ public abstract void open(); public abstract void close(); }
如果需要添加一个报警alarm()的功能,该如何实现?
如果把alarm()放到抽象类里,但是有的门不一定具备报警的功能,所以此路不通!
如果把alarm()放到接口里,需要用到报警功能的类就需要实现这个接口中的open( )和close( ),也许这个类根本就不具备 open( )和close( )这两个功能,比如火灾报警器。所以此路也不通!
以下为解决办法:
interface Alarm{ void alarm(); } abstract class Door{ void open(); void close(); } class AlarmDoor extends Door implements Alarm{ void open(){ //TODO } void close(){ //TODO } void alarm(){ //TODO } }