Java 抽象类详解

Java 面向对象编程 中,抽象类(abstract class )是一种不能直接实例化的类,用于定义一组具有共同特征的类的基本结构。它既可以包含抽象方法 (无方法体,需子类实现),也可以包含具体方法(有方法体,可直接复用)。

核心特性

  • 使用 abstract 关键字修饰类或方法。

  • 抽象类可以有成员变量构造方法普通方法

  • 若类中存在抽象方法,则该类必须声明为抽象类。

  • 子类必须实现所有抽象方法,否则也必须声明为抽象类。

示例代码

java 复制代码
// 抽象类定义
public abstract class Employee {
   private String name;
   public Employee(String name) { this.name = name; }
   public String getName() { return name; }
   // 抽象方法
   public abstract double computePay();
   // 普通方法
   public void mailCheck() {
       System.out.println("Mailing a check to " + name);
   }
}
// 子类实现抽象方法
public class Salary extends Employee {
   private double salary;
   public Salary(String name, double salary) {
       super(name);
       this.salary = salary;
   }
   @Override
   public double computePay() {
       return salary / 52;
   }
}

main 方法中:

java 复制代码
public static void main(String[] args) {
   Employee e = new Salary("John", 5200);
   e.mailCheck();
   System.out.println("Weekly Pay: " + e.computePay());
}

适用场景

  1. 代码复用:在抽象类中定义通用方法(如日志、验证逻辑),子类直接继承使用。

  2. 统一接口:定义一组必须由子类实现的抽象方法,确保行为一致性。

  3. 共享状态:抽象类可维护成员变量和构造逻辑,适合需要共享初始化的场景。

与接口的区别

  • 抽象类可包含状态(成员变量)[&和构造方法&],接口主要定义行为契约。

  • 一个类只能继承一个抽象类,但可实现多个接口。

  • 接口更适合多继承解耦协议 ,抽象类更适合代码复用与状态共享

注意事项

  • 抽象类不能用 new 实例化。

  • 设计时应确保抽象类有明确的继承价值,否则可直接使用接口。

  • 在 Java 8+ 中,接口也可有默认方法,但抽象类依然在需要状态和构造的场景中更优。

相关推荐
带刺的坐椅44 分钟前
Solon AI Skills 会是 Agent 的未来吗?
java·agent·langchain4j·solon-ai
jacGJ1 小时前
记录学习--文件读写
java·前端·学习
哈哈不让取名字1 小时前
基于C++的爬虫框架
开发语言·c++·算法
花间相见1 小时前
【JAVA开发】—— Nginx服务器
java·开发语言·nginx
扶苏-su1 小时前
Java---Properties 类
java·开发语言
cypking2 小时前
四、CRUD操作指南
java
2301_780669862 小时前
文件字节流输出、文件复制、关闭流的方法
java
一条咸鱼_SaltyFish3 小时前
远程鉴权中心设计:HTTP 与 gRPC 的技术决策与实践
开发语言·网络·网络协议·程序人生·http·开源软件·个人开发
我即将远走丶或许也能高飞3 小时前
vuex 和 pinia 的学习使用
开发语言·前端·javascript
沐知全栈开发3 小时前
SQL LEN() 函数详解
开发语言