0

0

在Java中类是如何抽象现实事物的_Java抽象思想解析

P粉602998670

P粉602998670

发布时间:2026-01-30 14:15:08

|

264人浏览过

|

来源于php中文网

原创

Java类是按需提取特征与行为的契约设计,类名应为名词性现实概念,属性须为业务所需状态,方法体现职责归属,继承表达“是一种”、接口表达“能做什么”,抽象需经需求迭代验证。

在java中类是如何抽象现实事物的_java抽象思想解析

Java 中的类不是对现实事物的“拍照式”复刻,而是按需提取特征与行为的契约设计——它只保留当前业务场景里真正要操作、要区分、要约束的部分。

类名和属性如何对应现实概念

类名应是名词性、可数、有明确边界的现实角色或事物,比如 OrderPaymentMethodDeliveryTruck;而属性必须是该角色在当前系统中“需要被记住”的状态,且能用基础类型或已有类表达。例如 Order 类里放 orderDatestatuscustomerName 合理,但放“客户早餐吃了什么”就不合理——除非你在做营养追踪系统。

常见错误是把数据库字段直接拖成属性,比如加一个 createdAtupdatedAt 进业务类,结果发现它们只用于审计、不参与任何业务逻辑,反而干扰了领域表达。

  • 属性命名优先用业务语言,如 isPaidpaymentStatusFlag 更直白
  • 避免冗余属性:不要同时存 totalAmountitemList 再加一个 calculateTotal(),三者语义冲突
  • 敏感信息(如身份证号、银行卡号)不该以明文 String 形式作为公开属性,应封装或脱敏

方法设计体现的是“谁该做什么”

方法不是功能清单,而是职责归属声明。现实里“订单可以取消”“支付可以退款”“卡车可以调度”,这些动词落到类上,就是 Order.cancel()Payment.refund()DeliveryTruck.assignDriver()。关键在主语——动作的发起者和承担者是否自然。

立即学习Java免费学习笔记(深入)”;

AI智研社
AI智研社

AI智研社是一个专注于人工智能领域的综合性平台

下载

容易踩的坑是把方法写成工具函数风格:OrderUtils.calculateDiscount(order),这等于把本该属于 Order 的定价逻辑外移,破坏了封装,也让折扣规则散落在各处。

  • 方法名用动词开头,且主语隐含在调用对象中,如 user.activate() 而非 activateUser(user)
  • 返回值应反映行为结果:状态变更类方法通常返回 booleanthis(支持流式调用),计算类方法返回具体值
  • 避免长参数列表,尤其是多个原始类型堆砌,如 createOrder(String, String, BigDecimal, int, boolean) —— 应封装为 OrderRequest 对象

继承与接口:抽象的是“是什么”还是“能做什么”

extends 表达“是一种”,必须满足里氏替换原则:所有子类对象能无缝替代父类出现的位置。比如 ElectricCar extends Vehicle 成立,但 Rectangle extends Square 不成立——因为正方形不能随意修改宽高而不破坏约束。

implements 表达“能做什么”,关注能力契约。现实中“能扫码”“能打印”“能投递”都是独立能力,对应 ScannablePrintableDeliverable 接口,一个 SelfServiceKiosk 可以同时实现三者,无需强行塞进某个继承链。

  • 优先用接口组合而非继承扩展行为,更灵活也更贴近现实中的多重角色
  • 抽象类适合提供共用状态+部分默认实现,比如 AbstractPayment 含通用 transactionId 和基础 validate(),但不强制子类必须用某种加密方式
  • 别为了“看起来像现实”而建继承树,比如为“猫”“狗”“鸟”建 Animal 父类,结果发现系统里根本不用“动物”这个泛化概念做任何判断或处理

抽象最难的部分,往往不是语法怎么写,而是反复问自己:“这个字段/方法/关系,在接下来三个月的需求迭代里,会被哪个角色基于什么理由去读、去改、去依赖?”——答案模糊的地方,就是抽象还没落到位的地方。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
string转int
string转int

在编程中,我们经常会遇到需要将字符串(str)转换为整数(int)的情况。这可能是因为我们需要对字符串进行数值计算,或者需要将用户输入的字符串转换为整数进行处理。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

463

2023.08.02

java中boolean的用法
java中boolean的用法

在Java中,boolean是一种基本数据类型,它只有两个可能的值:true和false。boolean类型经常用于条件测试,比如进行比较或者检查某个条件是否满足。想了解更多java中boolean的相关内容,可以阅读本专题下面的文章。

351

2023.11.13

java boolean类型
java boolean类型

本专题整合了java中boolean类型相关教程,阅读专题下面的文章了解更多详细内容。

32

2025.11.30

string转int
string转int

在编程中,我们经常会遇到需要将字符串(str)转换为整数(int)的情况。这可能是因为我们需要对字符串进行数值计算,或者需要将用户输入的字符串转换为整数进行处理。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

463

2023.08.02

int占多少字节
int占多少字节

int占4个字节,意味着一个int变量可以存储范围在-2,147,483,648到2,147,483,647之间的整数值,在某些情况下也可能是2个字节或8个字节,int是一种常用的数据类型,用于表示整数,需要根据具体情况选择合适的数据类型,以确保程序的正确性和性能。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

544

2024.08.29

c++怎么把double转成int
c++怎么把double转成int

本专题整合了 c++ double相关教程,阅读专题下面的文章了解更多详细内容。

113

2025.08.29

C++中int的含义
C++中int的含义

本专题整合了C++中int相关内容,阅读专题下面的文章了解更多详细内容。

200

2025.08.29

硬盘接口类型介绍
硬盘接口类型介绍

硬盘接口类型有IDE、SATA、SCSI、Fibre Channel、USB、eSATA、mSATA、PCIe等等。详细介绍:1、IDE接口是一种并行接口,主要用于连接硬盘和光驱等设备,它主要有两种类型:ATA和ATAPI,IDE接口已经逐渐被SATA接口;2、SATA接口是一种串行接口,相较于IDE接口,它具有更高的传输速度、更低的功耗和更小的体积;3、SCSI接口等等。

1155

2023.10.19

C++ 设计模式与软件架构
C++ 设计模式与软件架构

本专题深入讲解 C++ 中的常见设计模式与架构优化,包括单例模式、工厂模式、观察者模式、策略模式、命令模式等,结合实际案例展示如何在 C++ 项目中应用这些模式提升代码可维护性与扩展性。通过案例分析,帮助开发者掌握 如何运用设计模式构建高质量的软件架构,提升系统的灵活性与可扩展性。

14

2026.01.30

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Kotlin 教程
Kotlin 教程

共23课时 | 3万人学习

C# 教程
C# 教程

共94课时 | 8万人学习

Java 教程
Java 教程

共578课时 | 53.4万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号