Posted on 2009-02-03 12:21
栗衙 阅读(189)
评论(1) 编辑 收藏 所属分类:
程序钟摆
抽象类与接口
1 定义
抽象类:所有的对象都是通过类来描绘的,但是反过来却不是这样。并不是所有的类都是用来描绘对象的,如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类。
例如
2 语法
2.1 abstract class
可以有自己的数据成员
有非abstarct的成员方法
继承关系,一个类只能使用一次继承关系
可以赋予方法的默认行为
因为如果后来想修改类的界面(一般通过abstract class或者interface来表示)以适应新的情况(比如,添加新的方法或者给已用的方法中添加新的参数)时,就会非常的麻烦,可能要花费很多的时间(对于派生类很多的情况,尤为如此)。但是如果界面是通过abstract class来实现的,那么可能就只需要修改定义在abstract class中的默认行为就可以了。
同样,如果不能在抽象类中定义默认行为,就会导致同样的方法实现出现在该抽象类的每一个派生类中,违反了"one rule,one place"原则,造成代码重复,同样不利于以后的维护。因此,在abstract class和interface间进行选择时要非常的小心。
2.2 interface
只能够有静态的不能被修改的数据成员
所有的成员方法都是abstract的
实现关系,一个类却可以实现多个interface
不可以赋予方法的默认行为
3 设计理念
abstarct class:父类和派生类之间必须存在"is a"关系,即父类和派生类在概念本质上应该是相同的
3.1 interface
不要求interface的实现者和interface定义在概念本质上是一致的,仅仅是实现了interface定义的契约而已
4 实例
AlarmDoor在概念本质上是Door
同时它有具有报警的功能
abstract class Door {
abstract void open();
abstract void close();
}
interface Alarm {
void alarm();
}
class AlarmDoor extends Door implements Alarm {
void open() { … }
void close() { … }
void alarm() { … }
}