news 2026/9/3 4:34:18

Java:abstract

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Java:abstract

在 Java 中,abstract 是一个关键字,用于修饰类或方法,表示“抽象的”。它主要用于定义‌抽象类‌和‌抽象方法‌,是面向对象编程中实现抽象和多态的重要机制。
一、抽象类(Abstract Class)

抽象类是用 abstract 关键字修饰的类。它不能被直接实例化,只能被其他类继承。抽象类通常作为父类,定义子类共有的属性和行为,并可以包含抽象方法。
特点:

‌不能实例化‌:抽象类不能使用 new 关键字创建对象。
‌可以包含抽象方法和非抽象方法‌:抽象方法没有方法体,必须由子类实现;非抽象方法可以有具体实现。
‌可以包含构造器‌:虽然不能实例化,但抽象类可以有构造器,供子类调用
‌子类必须实现抽象方法‌:如果一个子类继承了抽象类,而没有实现所有抽象方法,则该子类也必须声明为抽象类。

示例:
abstract class Animal {
public abstract void makeSound(); // 抽象方法
public void sleep() { // 普通方法
System.out.println("Animal is sleeping");
}
}

class Dog extends Animal {
public void makeSound() {
System.out.println("Dog barks");
}
}

二、抽象方法(Abstract Method)

抽象方法是用 abstract 关键字修饰的方法,它没有方法体,仅声明方法签名。抽象方法必须在抽象类中定义,子类必须实现这些方法。
特点:

‌没有方法体‌:抽象方法以分号结尾,不包含实现代码。
‌必须在抽象类中定义‌:不能在普通类中定义抽象方法。
‌不能使用 private、static、final 修饰‌:因为这些修饰符与抽象方法的重写机制冲突
‌子类必须实现‌:如果子类不实现抽象方法,则该子类也必须声明为抽象类。

示例:
abstract class Shape {
public abstract double area(); // 抽象方法
}

class Circle extends Shape {
private double radius;

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

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

三、抽象类与接口的区别

特性抽象类(Abstract Class)接口(Interface)
继承单继承(一个类只能继承一个抽象类)多实现(一个类可以实现多个接口)
方法可包含抽象方法和具体方法Java 8 前只能有抽象方法,之后可包含默认方法和静态方法
字段可包含任意类型的字段(普通、静态、常量)只能包含 public static final 常量
构造器有构造器无构造器
设计目的表示“是一个”关系(is-a)表示“具有一种能力”(can-do)


四、使用场景

抽象类适用于以下情况:

  • 需要定义一组相关类的模板。
  • 共享代码,同时保留部分方法由子类实现。
  • 定义一个通用类结构,强制子类实现某些行为。

总结

abstract 关键字在 Java 中用于定义抽象类和抽象方法,其核心目的是‌定义规范、隐藏实现、支持多态‌。抽象类不能被实例化,必须由子类继承并实现其中的抽象方法。通过这种方式,Java 实现了代码的复用性和灵活性,是面向对象编程的重要组成部分。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/3 0:53:08

《从0到1:程序员一步一步创立一人公司并实现每日营收1万元》

《从0到1:程序员一步一步创立一人公司并实现每日营收1万元》 作者:iwant 基于AI研究创作 字数:约5万字 完成日期:2026年1月30日 版本:最终出版版v3.0 前言 我们正处在一个技术革命与创业范式转变的历史交汇点。当人工智能、云计算和自动化工具以前所未有的速度降低创业门…

作者头像 李华
网站建设 2026/9/2 22:23:47

搭便车,是实用的生活智慧

提起“搭便车”,很多人会下意识将其与“占便宜”“投机取巧”绑定,却忽略了它本质上是一种清醒且高效的生活选择:不盲目硬扛,善顺势借力,在不损害他人利益的前提下,用最低成本达成目标,这正是最…

作者头像 李华
网站建设 2026/9/2 23:03:37

Windows管理系统启动项的方法(windows启动项、开机自启)

文章目录Windows管理系统启动项的方法1. 通过任务管理器(最常用)2. 通过系统设置3. 通过系统配置工具(msconfig)4. 通过注册表编辑器(高级用户)5. 通过文件资源管理器6. 执行干净启动(故障排查&…

作者头像 李华
网站建设 2026/9/2 23:55:22

Excel实战技巧:使用SMALL函数实现盒号与档号的智能匹配查询

一、应用场景分析 在档案管理、库存管理或数据整理工作中,我们经常遇到这样的需求:根据某个条件(如盒号)快速查找并返回所有相关的数据(如档号)。传统的手工筛选方式效率低下,特别是当数据量大…

作者头像 李华
网站建设 2026/9/2 23:05:26

SpringBoot启动优化7板斧:砍掉70%启动时间的魔鬼实践

01 延迟初始化:按需加载的智慧 实践方案: # application.properties spring.main.lazy-initializationtrue优化原理: 延迟所有Bean的初始化直到首次使用 减少启动时的I/O操作和依赖解析 注意事项: // 对特定Bean禁用延迟初始…

作者头像 李华
网站建设 2026/9/2 13:11:21

SpringBoot3 配置文件使用全解析:从基础到实战,解锁灵活配置新姿势

SpringBoot 的核心优势之一便是“约定大于配置”,无需繁琐的 XML 配置,仅通过简单的配置文件就能完成项目的个性化定制。而 SpringBoot3 作为新一代主流版本,在配置文件的支持上延续了简洁性,同时优化了部分特性、新增了一些实用功…

作者头像 李华