文章目录
- 1. 抽象类的概述
- 2. 抽象类的特点
- 3. 抽象类的实用价值
- 4. 抽象类的案例
1. 抽象类的概述
当我们在做子类共性功能抽取时,有些方法在父类中并没有具体的体现,这个时候就需要抽象类了!
在Java中,一个没有方法体的方法应该定义为抽象方法,而类中如果有抽象方法,该类必须定义为抽
象类!
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();
}