抽象类的作用仅仅是表达接口,不表达具体的实施细节。如果一个类里包含了一个或多个抽象方法,类就必须指定成abstract(抽象)。如果从一个抽象类继承,而且想生成新类型的一个对象,就必须为基础类中的所有抽象方法提供方法定义。如果不这样做(完全可以选择不做),则衍生类也会是抽象的。
子类继承了父类的所有方法,但是不是所有方法都从父类继承,它可以有自己独有的方法。

解决方案 »

  1.   

    不是。与其它的类继承差不多,可以定义子类自己的方法,也可以覆盖父类中的方法。但要注意的一点是,子类必须实现超类中的所有抽象方法,如果没有实现,则这个子类必须也被声明为abstract类型。
      

  2.   

    在子类中可以定义部分或全部父类的抽象方法,如果没有全部定义父类的抽象方法,那么子类也是一个抽象类,声明子类时必须加上abstract.当然子类也可以添加自己的方法,而不管该子类是不是抽象类。
      

  3.   

    父类:
    public abstract class abc {
      public void doIt() {
        System.err.println("c it!");
      }
    }字类:
    public class abcd extends abc {
    }呵呵。子类不用实现任何方法,一样合法。这里的作用就是在逻辑上,让父类可见。这样,就可以解决一个逻辑问题:某个概念类有多个子类,其中一个或一些和他的行为相同,或在我们讨论的范围内相同。
      

  4.   

    这叫抽象?抽象是抽象出了子类的共同点,并去掉了其子类的不同点,然后由子类再来添加自己的特性。abcd是继承了abc可是他们有什么不同吗,当用abc定义的对象被赋予abcd的对象实体的时候,方法都将被上校正到abc的这个方法,无论你的子类怎么覆盖这个方法的,他们的区别最多也就是abc只能定义对象而abcd既可以定义也可以实现,而且没有抽象方法的抽象类根本没有体现出抽象的任何意义?就像你定义了“动物”,并且定义了一个方法“跑”并且具体实现为“撒开4条腿跑”,而你又从动物派生了一个类叫“动物1”,你却没有给他人和方法的加强和任何其他属性,还是撒开腿跑,那所有动物都4条腿跑吗?横着跑呢还是竖着跑?你可以说我定义的动物都用4条腿都是同一个跑法,那还叫抽象吗?
      

  5.   

    我说的是“讨论的范围内”,这是理论问题。比如,如果只考察运动状况,那么,creature这个类有一个唯一方法,public void moveTo(float xoff, float yoff) {
      this.x = x + xoff;
      this.y = y + yoff;
    }就是2维运动了。你当然可以给你的子类加各种方法来扩充,比如给leopad加jumpTo,给salmon加diveTo(都是3维运动)。但是,并不是所有的creature都有jump和dive能力的。在运动方面就是这样。所以,在运动领域,有大量的creature不需要扩充方法,或是override moveTo。明白没?咱们既然说概念,就不要具体化。这个东西在现实中当然不会碰到,因为现实中没有这么简单的模型。既然楼主问概念,咱就讲概念。抽象类的意思是抽象,而不是方法,搞清楚。他之所以和interface不一样,就在于此。interface才是方法抽象。