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+ 中,接口也可有默认方法,但抽象类依然在需要状态和构造的场景中更优。

相关推荐
JAVA面经实录91710 小时前
Java企业级工程化·终极完整版背诵手册(无遗漏、全覆盖、面试+落地通用)
java·开发语言·面试
周杰伦fans11 小时前
AutoCAD .NET 二次开发:深入理解 EntityJig 的工作原理与正确实现
开发语言·.net
许彰午11 小时前
CacheSQL(二):主从复制——OpLog 环形缓冲区与故障自动恢复
java·数据库·缓存
Bat U12 小时前
JavaEE|多线程初阶(七)
java·开发语言
谭欣辰13 小时前
C++ 排列组合完整指南
开发语言·c++·算法
foundbug99914 小时前
自适应滤除直达波干扰的MATLAB实现
开发语言·算法·matlab
XDH_CS14 小时前
MySQL 8.0 安装与 MySQL Workbench 使用全流程(超详细教程)
开发语言·数据库·mysql
小短腿的代码世界14 小时前
Qt实时盈亏计算深度解析:从持仓数据到动态盈亏展示
开发语言·qt
小康小小涵14 小时前
基于ESP32S3实现无人机RID模块底层源码编译
linux·开发语言·python