我想它有两个作用:
一、提供一些不需实现的接口来规范其子类的接口、当然其子类实现这些接口时可用不同的方法。
二如楼上所说,为了实现多态和动态绑定。
如果楼主不理解多态和动态绑定,可以看看这个很多书都提到的例子:
在抽象类Shape中提供了一个抽象方法draw,Shape有三个子类Circle、Triangle和Line都具体实现了这个方法。在一个以Shape为参数的方法void huatu(Shape shape)中要实现这样一个功能,它要调用Shape.draw()来画某一具体形状,Circle、Triangle和Line的对象都可以传递给方法huatu,因为它们也是Shape类的对象,在调用Shape.draw()时,会根据所传参数对象的具体类型来调用Circle.draw()、Triangle.draw()或者Line.draw()来实现画出具体形状,这就是所谓的动态绑定。
一、提供一些不需实现的接口来规范其子类的接口、当然其子类实现这些接口时可用不同的方法。
二如楼上所说,为了实现多态和动态绑定。
如果楼主不理解多态和动态绑定,可以看看这个很多书都提到的例子:
在抽象类Shape中提供了一个抽象方法draw,Shape有三个子类Circle、Triangle和Line都具体实现了这个方法。在一个以Shape为参数的方法void huatu(Shape shape)中要实现这样一个功能,它要调用Shape.draw()来画某一具体形状,Circle、Triangle和Line的对象都可以传递给方法huatu,因为它们也是Shape类的对象,在调用Shape.draw()时,会根据所传参数对象的具体类型来调用Circle.draw()、Triangle.draw()或者Line.draw()来实现画出具体形状,这就是所谓的动态绑定。
如果其基础知识真的都明白了,就不会问这个问题了。
KeyReader <------ YourProgram ----> MonitorWriter
这么做好像没有问题。假设你的BOSS改变了注意,要你改为把输出到打印机,那么很自然你就需要修改程序。变成:
KeyReader <------ YourNewProgram ----> PrinterWriter.假设需要同时支持两种设备,那么就在你的程序判断:
KeyReader <------ YourNProgram ----> Printer
----> Monitor要是你的BOSS不断要求你增加新的设备,你烦不烦??
那就抽象有用了,你把写设备抽象出来。
KeyReader <------ YourProgram ----> AbstractWriter <---- PrinterWriter
<---- MonitorWriter
而PrinterWriter,MonitorWriter去实现这个抽象。那么就算增加再多的设备,你也不用再改程序了。对于Reader也是一样的。
说得太好了 呵呵 很有说服力啊 顶~~~~~~