Java 抽象类与抽象方法完全指南
Java 抽象类与抽象方法
本教程通过示例驱动方式,清晰讲解 Java 抽象类与抽象方法,并解释 Java 中抽象的实现机制。
Java 抽象类
在 Java 中,抽象类不能被实例化。abstract 关键字标记类为抽象。例如:
// 创建抽象类 abstract class Language { // 字段和方法 } ... // 尝试创建对象 Language // 抛出错误 Language obj = new Language();
抽象类可同时包含具体(普通)方法和抽象方法。例如:
abstract class Language { // 抽象方法 abstract void method1(); // 普通方法 void method2() { System.out.println("This is regular method"); } }
了解更多普通方法,请参阅 Java 方法。
Java 抽象方法
抽象方法无方法体;它声明子类必须履行的契约。使用 abstract 关键字定义,如:
abstract void display();
因无方法体,语句以分号结尾。若类声明抽象方法,该类本身必须声明为抽象,否则编译报错:
// error // 类应声明为 abstract class Language { // 抽象方法 abstract void method1(); }
示例:Java 抽象类与方法
虽然抽象类不能直接实例化,但具体子类可继承并使用其成员。例如:
abstract class Language { public void display() { System.out.println("This is Java Programming"); } } class Main extends Language { public static void main(String[] args) { Main obj = new Main(); obj.display(); } }
输出
This is Java programming
此处,抽象类 Language 定义了具体方法 display()。子类 Main 继承该方法并通过实例调用。
实现抽象方法
抽象类声明抽象方法时,每个具体子类必须提供实现。例如:
abstract class Animal { abstract void makeSound(); public void eat() { System.out.println("I can eat."); } } class Dog extends Animal { public void makeSound() { System.out.println("Bark bark"); } } class Main { public static void main(String[] args) { Dog d1 = new Dog(); d1.makeSound(); d1.eat(); } }
输出
Bark bark I can eat.
子类 Dog 实现了抽象方法 makeSound(),同时继承了具体方法 eat()。
注意:若 Dog 不重写 makeSound(),它自身必须声明为抽象类。
访问抽象类的构造器
抽象类可像普通类一样定义构造器。子类通过 super() 调用父类构造器。例如:
abstract class Animal { Animal() { // 初始化逻辑 } } class Dog extends Animal { Dog() { super(); // 额外初始化 } }
记住 super() 必须是子类构造器的第一条语句。
Java 抽象
抽象类和抽象方法是 Java 实现抽象的主要工具。抽象隐藏不必要的实现细节,仅向用户暴露核心接口。这简化复杂系统并提升灵活性。
例如,摩托车刹车执行相同的高层功能 —— 减速,但内部机制在不同车型间可能不同。
示例 3:Java 抽象
abstract class MotorBike { abstract void brake(); } class SportsBike extends MotorBike { public void brake() { System.out.println("SportsBike Brake"); } } class MountainBike extends MotorBike { public void brake() { System.out.println("MountainBike Brake"); } } class Main { public static void main(String[] args) { MountainBike m1 = new MountainBike(); m1.brake(); SportsBike s1 = new SportsBike(); s1.brake(); } }
输出:
MountainBike Brake SportsBike Brake
每个具体子类提供自己的 brake() 实现,展示抽象如何将接口与实现解耦。
注意:接口也可用于在 Java 中实现抽象。
关键点回顾
- 使用
abstract关键字声明抽象类和抽象方法。 - 抽象方法无方法体,以分号结尾。
- 包含抽象方法的类必须声明为抽象。
- 抽象类不能直接实例化。
- 具体子类继承抽象类并为抽象方法提供实现。
- 除非子类声明为抽象,否则必须重写所有抽象方法。
- 抽象类的静态成员可通过类名访问:
Animal.staticMethod();
java
- 掌握 C# 抽象类与抽象方法:实战指南
- Java 变量与字面量:全面指南
- Java 类与对象:实用指南
- 深入理解 Java final 关键字:变量、方法与类的不可变性
- Java instanceof 运算符完全指南:用法、继承与接口检查
- 精通 Java 嵌套类与内部类:类型、示例与最佳实践
- 深入理解 Java 静态嵌套类:用法、差异与实战示例
- 精通 Java 匿名内部类:定义、语法与实战示例
- Java 单例模式详解:安全实现与使用指南
- 掌握 Java ObjectOutputStream:序列化、核心方法与实战示例
- 掌握 Java 泛型:构建可复用、类型安全的代码
- 掌握 Java 文件操作:java.io 包下的创建、读取、写入与删除