黑马程序员技术交流社区

标题: 抽象类和抽象方法有什么意义呢 [打印本页]

作者: 孙沛    时间: 2012-9-6 16:14
标题: 抽象类和抽象方法有什么意义呢
  1. abstract class Student
  2. {
  3.         abstract final void study();
  4.         void sleep()
  5.         {
  6.                 System.out.println("躺着");
  7.         }
  8. }

  9. class StudentA extends Student
  10. {
  11.         void study()
  12.         {
  13.                 System.out.println("a like study");
  14.         }
  15. }
复制代码
刚看毕老师视频.    我只知道抽象类和其他它类有什么不同.
但不知道为什么要建立抽象类和方法.像上边抽取这个抽象的父类有什么意义吗



作者: 武庆东    时间: 2012-9-6 16:18
本帖最后由 武庆东 于 2012-9-6 16:53 编辑

      抽象类中必然有抽象方法,抽象类体现的是一种设计模式,抽象类作为多个子类的通用模版,子类在抽象类的基础上进行扩展和改造但子类总体上会大致保留抽象类的行为方式。本质上是相同的具体概念的抽象,不能对其进行实例化!如果编写一个抽象的父类,为子类提供了必须拓展的方法,并把一个甚至多个方法提供给子类实现,也是一种规范作用!
举例:
   abstract class  A{
//为子类定义了必须实现和继承(指抽象类)的方法
    public abstract void print();
}
   class  B extends A{
//实现父类的方法
    public void print(){
  System.out.println("hello world");
}
}
public class C{
   public static void main(String[] args){
   B b=new B();
    b.print();
}
}
     接口在这方面做得更为彻底,接口其实也是一种特殊的接口,它是一个抽象方法声明和静态不能被修改的数据的集合,不能进行实例化!
对于抽象类


作者: 黑马_张海涛    时间: 2012-9-6 16:59
嗯,我用我自己的话来描述下吧,希望对你有用
就你所举的例子而言,学生这个对象中,有共同的地方,比如都要睡觉,也有每个学生所特有的特点,比如姓名不同,年龄不同等等,那么抽象类的建立其实就是对这些共同特征的抽取,建立子类继承父类时,共同的地方被继承,这样就就提高了代码的复用性。
在这一知识点中需要注意的是:抽象方法必须要包含在抽象类中,而抽象类中,不一定必须要有抽象方法。

图片就是抽象方法没有包含在抽象类中的错误提示。

settingbar.png (3.61 KB, 下载次数: 67)

settingbar.png

作者: 魏-玉-彪    时间: 2012-9-6 18:42
本帖最后由 魏-玉-彪 于 2012-9-6 18:58 编辑

abstract class Student
{
        abstract final void study(); // 强制子类覆写此方法
        void sleep()
        {
                System.out.println("躺着");
        }
}

class StudentA extends Student     
{
        void study()  // 覆写父类此方法
        {
                System.out.println("a like study");
        }
}

一个重要的作用就是强制子类覆写方法,比如定义了一个学生抽象类,这个学生抽象类用不同的子类,如

初级班,中级班,高级班,这些班实现的方法不同,但是他们都用一个共同的方法就是学习,学习什么

呢?各班不同,在定义类的时候,可以把学习这个方法抽象出来,具体学些的内容用各个类自己去实现。

在定义各个子类的时候,必须覆写这个抽象父类中的学习方法。
  1. abstract class Student
  2. {
  3.         abstract final void study();
  4.         void sleep()
  5.         {
  6.                 System.out.println("躺着");
  7.         }
  8. }


  9. class ChongCiStudent extends Student
  10. {
  11.         void study()
  12.         {
  13.                 System.out.println("chongci study");
  14.         }
  15. }

  16. class BaseStudent extends Student
  17. {
  18.         void study()
  19.         {
  20.                 System.out.println("base study");
  21.         }
  22. }

  23. class AdvStudent extends Student
  24. {
  25.         void study()
  26.         {
  27.                 System.out.println("adv study");
  28.         }
  29. }
复制代码





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2