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

相关推荐
傻乐u兔2 小时前
C语言进阶————指针3
c语言·开发语言
老毛肚2 小时前
手写mybatis
java·数据库·mybatis
两点王爷2 小时前
Java基础面试题——【Java语言特性】
java·开发语言
choke2332 小时前
[特殊字符] Python 文件与路径操作
java·前端·javascript
Swift社区2 小时前
Gunicorn 与 Uvicorn 部署 Python 后端详解
开发语言·python·gunicorn
choke2332 小时前
Python 基础语法精讲:数据类型、运算符与输入输出
java·linux·服务器
码农阿豪2 小时前
Python Flask应用中文件处理与异常处理的实践指南
开发语言·python·flask
岁岁种桃花儿2 小时前
CentOS7 彻底卸载所有JDK/JRE + 重新安装JDK8(实操完整版,解决kafka/jps报错)
java·开发语言·kafka
csbysj20203 小时前
AngularJS 模块
开发语言
独好紫罗兰3 小时前
对python的再认识-基于数据结构进行-a003-列表-排序
开发语言·数据结构·python