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

相关推荐
学逆向的5 小时前
C++纯虚函数
开发语言·c++·网络安全
何极光5 小时前
IDEA集成Maven
java·maven·intellij-idea
程序员二叉5 小时前
【JUC】ThreadLocal底层原理|内存泄漏|弱引用|跨线程传递方案
java·开发语言·面试·职场和发展·juc
程序员二叉5 小时前
【JUC】线程池全套深度详解|参数|流程|拒绝策略|调优|异常处理
java·开发语言·jvm·算法·面试·juc
老马识途2.05 小时前
在AI的帮助下理解spring的启动过程
java·前端·spring
青山木6 小时前
Hot 100 --- 轮转数组
java·数据结构·算法
凡人叶枫6 小时前
Effective C++ 条款22:将成员变量声明为 private
linux·开发语言·c++
Qt程序员6 小时前
掌握 Linux 内核调度:从原理到实现(进程篇)
java·开发语言
code bean6 小时前
【LangChain】检索器完全指南:从向量检索到生产级 RAG 架构
java·开发语言·微服务
大白菜和MySQL6 小时前
java应用排查高线程
java·python