我想它有两个作用:
    一、提供一些不需实现的接口来规范其子类的接口、当然其子类实现这些接口时可用不同的方法。
   二如楼上所说,为了实现多态和动态绑定。
如果楼主不理解多态和动态绑定,可以看看这个很多书都提到的例子:
    在抽象类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()来实现画出具体形状,这就是所谓的动态绑定。

解决方案 »

  1.   

    <<抽象类的基础知识我都明白了,可是它有什么用呢?不用不也行么?>>
    如果其基础知识真的都明白了,就不会问这个问题了。
      

  2.   

    在超类实现,在子类覆盖也是可以的,不过很多情况是在超类实现没什么意义,就上面那个例子来说,Shape类没有任何的数据成员,只是提供了一些抽象的方法来提供其子类共有的接口,对于她来说这些实现这些方法是没任何意义的,也就是说对于一个抽象的形状你是画不出来的。
      

  3.   

    <<好吧,那就是我不明白。就别讽刺我了,帮我解决解决问题吧,不然用起来总觉得不塌实。>>很简单嘛,比如你需要编写一个程序,读取键入的数据输出到终端,那么就这么设计:
    KeyReader <------ YourProgram ----> MonitorWriter
    这么做好像没有问题。假设你的BOSS改变了注意,要你改为把输出到打印机,那么很自然你就需要修改程序。变成:
    KeyReader <------ YourNewProgram ----> PrinterWriter.假设需要同时支持两种设备,那么就在你的程序判断:
    KeyReader <------ YourNProgram ----> Printer
                                   ----> Monitor要是你的BOSS不断要求你增加新的设备,你烦不烦??
    那就抽象有用了,你把写设备抽象出来。
    KeyReader <------ YourProgram ----> AbstractWriter <---- PrinterWriter
                                                       <---- MonitorWriter
    而PrinterWriter,MonitorWriter去实现这个抽象。那么就算增加再多的设备,你也不用再改程序了。对于Reader也是一样的。
      

  4.   

    xiaohaiz(城里的老土,两眼依然通红!)
    说得太好了 呵呵  很有说服力啊  顶~~~~~~