1、如果:class A是一个抽象类 class B extends A 但是class B没有定义所有的抽象方法,那么这种情况下 class B 也是抽象类? 也就是说如果继承了一个抽象的超类,那么派生类一旦没有定义它超类中的所有抽象方法,那么系统就将这个类定义为一个抽象类?2、如果一个派生类继承了一个抽象类,但是不一定会定义它的所有抽象方法,那么我需要在 class 前面用关键字 abstract 定义吗? 

解决方案 »

  1.   

    楼主普及知识吗?学习之,hoho~
      

  2.   

    比如是设计了一个Car类,然后定义一个abstract void speed();
    派生两个BMWCar和PosicheCar,宝马和保时捷的加速度行为不一样吧,但是他们都有提速的这个行为。所以就在抽象类中定义一个概括性的方法,大纲,具体的实现行为交给实现类去做。
      

  3.   

    所以说嘛~~抽象的方法,总归要被定义完的,又何必 class A是抽象类(有3个抽象方法),派生出抽象类 class B (定义了2个抽象方法)
     再派生出 class C(将剩余的另一个抽象方法定义了),这样岂不是浪费步骤~~
      

  4.   

    呵呵,你要慢慢摸索一种设计思想,就像为什么所有类都继承Object一样
    一个抽象的鸟类派生一种在天上飞的抽象鸟类,还可派生只能在地上走的抽象鸟类
    这2个抽象鸟类还是抽象的,还需要具体的什么鸟去实现他
      

  5.   

    1,如果一个类并没有完成实现其父类中的抽象方法,而这个类又没有声明为 abstract 的话,
         在编译时就会产生错误,系统并不会把它当作抽象类。2,必须加上 abstract。
    这样可以逐层进行细化,每一个继承层都继承上一层的抽象方法(不实现/部分实现/实现),
    再增加一些新的抽象方法,进行再抽象。继承层次越多,系统设计越复杂、系统越精致、重用度越高,像 Spring 中某些类的继承链
    能达到七八层,先是接口继承接口,然后再是抽象类实现接口,再由抽象类继承抽象类,最
    后由类继承抽象类来完全实现。
      

  6.   

    ls说的很好,已经很清楚了,开个玩笑总结一下:这就是脱裤子放p的过程,鼓掌,呵呵