Java中的抽象类和接口
1.声明方法的存在而不去实现它的类叫做抽象类.它主要用于创建一个体现某些基本行为的类.
2.接口是抽象类的变异.在接口中所有方法都是抽象的,没有程序体.接口只可以定义static final变量.
---------------------------------------------------------------------------------------
对于抽象类与接口的区别,单纯从概念上很难有明确的答案,我们可以通过"报警门"的例子,来注意二者的区别.
不同的门都具有某些基本行为,比如open(),close().使用抽象类和接口都可以定义者两个行为.但是如果要增加报警alarm()的特性,应该改怎么办呢?
是使用抽象类还是使用接口?
若open,close,alarm都在抽象类中实现,则有些不妥,因为并不是所有的门都具有报警功能.
若opne,close,alarm都在接口中实现,则具有报警功能的门也必须实现open和close.相当于在每个门的实现类中都要实现open和close
如果采用以下方案是不是会更好呢?
把基本行为open和close在抽象类中实现,把alarm行为(或者成为个性化行为)在接口中实现.则一个完美的方案就出来了.
abstract class Door { abstract void open(); abstract void close(); }
interface Alarm{
void alarm();
}
class AlarmDoor extends Door implents Alarm{
void open(){....};
void close(){....};
void alarm(){....};
}
---------------------------------------------------------------------------------------
抽象类,"is a"关系,抽象出共同的基本行为;接口,"like a"关系,个性化行为,可实现多重继承。
抽象类就是类的基本行为,共同的;接口是个性化的,若想让类更具个性化,则继承相应个性话的接口即可。