抽象类里边定义抽象方法目的就是为了让子类去实现,因为子类可能对于同一个方法的实现内容会不一样,比如说学生类里边有个学习的方法,但小学生,初中生,高中生,大学生虽然都是学生类的子类,但他们学习的内容显然不相同,这样父类里边有学习这个方法,却无法具体实现,只能由其子类根据自己的需要来实现。至于你所说的抽象方法定义的多余,浪费空间,这个根本不是设计抽象类的重点,抽象类的出现是为了简化编程,缩短代码,其实就是为了多态,还能方便与程序的扩展。尤其是使用父类引用指向子类对象这种用法(这就是多态),非常有利与缩短代码,编写程序。下边的这个例子就是一个证明。- class Student //学生类的父类
- {
- String name; //姓名
- int age; //年龄
- //学习方法
- public void study()
- {
- }
- //度假方法
- public void goVacation()
- {
- }
- //自我介绍方法
- public void introduce()
- {
- System.out.println("我叫"+name+",我今年"+age+"岁!");
- }
- }
- class BaseStudent extends Student
- {
- BaseStudent(String name,int age)
- {
- this.name = name;
- this.age = age;
- }
- //重写父类的study()方法
- public void study()
- {
- System.out.println("base study");
- }
- //重写父类的度假方法
- public void goVacation()
- {
- System.out.println("BaseStudent go vacation");
- }
- }
- class AdvStudent extends Student
- {
- AdvStudent(String name ,int age)
- {
- this.name = name;
- this.age = age;
- }
- //重写父类的study()方法
- public void study()
- {
- System.out.println("advance study");
- }
- //重写父类的度假方法
- public void goVacation()
- {
- System.out.println("AdvStudent go vacation");
- }
- }
- class ExtendsDemo
- {
- public static void main(String[] args)
- {
- Student s1 = new BaseStudent("李四",20);
- Student s2 = new AdvStudent("张三",21);
- stuDoSomething(s1);
- stuDoSomething(s2);
- }
- //定义方法让学生做事
- public static void stuDoSomething(Student s)
- {
- s.introduce();
- s.study();
- s.goVacation();
- }
- }
复制代码 而如果要是没有这种多态性,main函数里边调用子类就要这样写- public static void main(String[] args)
- {
- BaseStudent s1 = new BaseStudent("李四",20);
- AdvStudent s2 = new AdvStudent("张三",21);
- s1.introduce();
- s1.study();
- s1.goVacation();
- s2.introduce();
- s2.study();
- s2.goVacation();
复制代码 这样的话由多态情况下的每个对象只需要一句调用变成了没有多态情况下的3句调用,这样程序会显得非常繁琐,如果创建的子类对象更多,代码将会变得非常臃肿,而多态情况下这种情况会得到大大的好转!
希望能帮助楼主理解抽象类的作用以及应用! |