1. 抽象类的概述
2. 抽象类的特点
- 抽象类和抽象方法必须使用 abstract 关键字修饰
//抽象类的定义 public abstract class 类名 {} //抽象方法的定义 public abstract void eat();
- 抽象类中不一定有抽象方法,有抽象方法的类一定是抽象类
- 抽象类不能实例化
- 抽象类可以有构造方法
- 抽象类的子类
- 要么重写抽象类中的所有抽象方法
- 要么是抽象类
3. 抽象类的实用价值
封装共性功能:抽象类可以封装多个子类共同拥有的功能,避免各自独立实现重复的代码。通过将共性行为定义在抽象类中,具体子类只需要实现自己的特殊逻辑即可,可以大大提高代码的复用性。
规范行为:抽象类通过定义抽象方法,规范了子类的行为,强制子类必须实现相关方法,从而避免了因漏实现或实现不当带来的问题;同时也增加了代码的易读性、易维护性反向控制:抽象类能够为子类提供基本行为框架,在子类中调用父类定义的具体方法和属性,以完成基本功能。子类通过继承与扩展的方式实现自己的特殊逻辑,这种反向控制能够在大型工程中有效地管理代码结构和维护。
技术支持:在框架设计、系统维护以及代码重构等过程中,抽象类可以提供技术支持和规范,将大型工程的不同部分组合起来形成协调有序的整体,并且能够保证不同部分之间的解耦和相互独立性。
4. 抽象类的案例
案例需求
定义猫类(Cat)和狗类(Dog)
猫类成员方法:eat(猫吃鱼)drink(喝水…)
实现步骤
猫类和狗类中存在共性内容,应向上抽取出一个动物类(Animal)
父类Animal中,无法将 eat 方法具体实现描述清楚,所以定义为抽象方法
抽象方法需要存活在抽象类中,将Animal定义为抽象类
让 Cat 和 Dog 分别继承 Animal,重写eat方法
测试类中创建 Cat 和 Dog 对象,调用方法测试
代码实现
动物类
public abstract class Animal { public void drink(){ System.out.println("喝水"); } public Animal(){ } public abstract void eat(); }
猫类
public class Cat extends Animal { @Override public void eat() { System.out.println("猫吃鱼"); } }
狗类
public class Dog extends Animal { @Override public void eat() { System.out.println("狗吃肉"); } }
测试类
public static void main(String[] args) { Dog d = new Dog(); d.eat(); d.drink(); Cat c = new Cat(); c.drink(); c.eat(); //Animal a = new Animal(); //a.eat(); }