JAVA中的抽象类和抽象方法

在面向对象编程中,"抽象"代表着对事物共性的提取。很多时候,一个父类定义了通用的行为规范,但部分行为并不能直接确定,需要交由子类去实现。为此,Java 提供了 抽象类(abstract class)抽象方法(abstract method) 机制,用于在类层次结构中建立标准与约束。

1.抽象类(Abstract Class)

1.1 定义

抽象类是使用 abstract 关键字修饰的类,它 不能被直接实例化

它通常用来作为父类,为子类提供统一的设计规范和部分默认实现。

java 复制代码
// 抽象类:定义了所有员工的基本行为和数据
public abstract class Employee {
    private String name;

    // 构造函数,用于子类初始化父类成员
    public Employee(String name) {
        this.name = name;
    }

    // 具体方法:所有员工都能执行
    public void displayInfo() {
        System.out.println("Employee Name: " + this.name);
    }
    
    // 抽象方法(见下文):薪水的计算方式必须由具体的子类定义
    public abstract double calculateSalary();
}

1.2 特点

  1. 不能实例化new Employee() 会报错。

  2. 可以包含:

    • 成员变量
    • 普通方法(已实现)
    • 抽象方法(未实现)
    • 构造方法(供子类调用)
  3. 继承要求 :子类必须实现 抽象类中的所有 抽象方法,否则子类也必须声明为抽象类

2. 抽象方法(Abstract Method)

2.1 定义

抽象方法是用 abstract 关键字修饰的方法,只有方法声明,没有方法体

其目的在于强制子类提供该方法的具体实现

java 复制代码
public abstract class Shape {
    // 抽象方法
    public abstract double area();
}

2.2 子类实现

当一个类继承了包含抽象方法的抽象类,必须重写该抽象方法:

java 复制代码
public class Circle extends Shape {
    private double radius;

    public Circle(double radius) {
        this.radius = radius;
    }

    @Override
    public double area() {
        return Math.PI * radius * radius;
    }
}

2.3 注意事项

  • 抽象类中可以没有抽象方法 ,但如果有抽象方法,该类必须声明为抽象类

  • 抽象类可以有构造方法,主要用于子类初始化时调用。

  • 抽象方法不能使用 static、final、private 修饰(因为它们和多态特性冲突)。

    复制代码
      private 阻止子类访问和实现。
      static 意味着方法属于类本身而非对象,与抽象方法的"待实现"性质冲突。
      final 阻止子类重写方法,与抽象方法的"必须实现"性质冲突。
  • 一个类只能单继承一个抽象类,但可以实现多个接口(抽象类和接口结合使用更灵活)。

相关推荐
摇滚侠13 小时前
Spring 零基础入门到进阶 入门 06-10
java·spring·intellij-idea
要开心吖ZSH13 小时前
AI医疗分诊与健康咨询助手agent开发——(1)从零搭建SpringBoot与AI对话系统:后端骨架 + 前端对话页 + SSE流式输出
java·ai·agent·健康医疗
星恒随风13 小时前
C++ 类和对象入门(三):拷贝构造、赋值运算符重载和深浅拷贝
开发语言·c++·笔记·学习
RickyWasYoung13 小时前
【Matlab】科研绘图配色-极简版
开发语言·matlab
biubiubiu070613 小时前
SpringBoot生产级日志配置
java·spring boot·后端
凡人叶枫13 小时前
Effective C++ 条款03:尽可能使用 const
linux·开发语言·c++·嵌入式开发
光影62713 小时前
Python接口自动化测试----Requests库基础入门
开发语言·python·测试工具·pycharm·自动化
程序媛_13 小时前
【Python】连接PostgreSQL获取手机验证码
开发语言·python·postgresql
ch.ju13 小时前
Java Programming Chapter 4——Inherited call
java·开发语言
是有头发的程序猿13 小时前
竞品分析 + 用户洞察自动化|基于 item_review 评论接口 + 多 AI Agent 实现淘宝评论全量采集与智能分析(附python源码)
java·python·自动化