抽象类 (Abstract Class)
一、抽象类的基本概念
1. 抽象方法
- 定义:一个没有方法体的方法(即只有方法声明,没有具体的实现)。
- 格式:
public abstract 返回值类型 方法名 (参数列表); - 特点:
- 使用
abstract关键字修饰。 - 没有方法体,直接以分号
;结束。 - 它定义了一个'必须实现'的规范或契约。
- 使用
2. 抽象类
- 定义:包含抽象方法的类必须被声明为抽象类。
- 格式:
public abstract class 类名 { // 类的内容 } - 特点:
- 使用
abstract关键字修饰类。 - 抽象类不能直接实例化(不能
new抽象类)。
- 使用
二、抽象类的作用与设计思想
抽象类的核心是一种'未完成'的类设计模板。
- 抽取共性,定义规范:
- 当在父类中提取多个子类的共性行为时,如果无法(或不适合)确定该行为的具体实现,就将该方法声明为抽象方法。
- 这样,抽象类就定义了一个'规范'或'契约',强制所有非抽象的子类必须按照这个声明来提供具体的实现。
- 强制子类重写:
- 子类继承抽象类后,必须处理这些抽象方法。这保证了代码的一致性。
通俗理解:抽象类就像是制定了一份'必须完成的任务清单'。清单上只写了任务名称和要求(抽象方法),但没写怎么做。子类就像不同的执行者,它们必须按照清单完成所有任务(实现所有抽象方法),但可以根据自己的情况选择不同的完成方式。
三、继承抽象类的注意事项
当一个普通类继承一个抽象类时,有两种选择:
- 重写所有抽象方法(推荐,也是最常见的情况)
- 将父类中定义的所有抽象方法都提供具体的实现。
- 这样,子类就成为了一个'具体类',可以被正常实例化。
- 将自己也声明为抽象类
- 如果子类没有重写或没有重写全部的抽象方法,那么这个子类也必须用
abstract关键字修饰,成为一个新的抽象类。 - 这个新的抽象类可以继续被其他类继承。
- 如果子类没有重写或没有重写全部的抽象方法,那么这个子类也必须用
简单总结:'抽象'具有传递性。一个类只要继承了抽象方法而没有实现它,它自己就必须保持抽象。
四、抽象类的其他特性
-
抽象类中可以有构造方法:
public abstract class Animal { private String name; // 抽象类可以有构造方法 public Animal { .name = name; } String { name; } ; }

