当前位置: 首页 > article >正文

在Java中什么是面向对象编程思想

Java面向对象编程的本质是用类建模事物、对象承载状态、包装、继承和多态组织逻辑类是抽象模板对象是具体的例子包装注重可控访问继承表达“一”组合表达“一”界面定义能力合同抽象类提供共同骨架。在Java中面向对象编程OOP思想的本质是**用“类”建模现实事物用“对象”承载具体状态然后通过包装、继承和多态三个支柱组织代码逻辑**。它不是语法糖而是提前在结构层面回答“谁在做什么怎么做的细节藏在哪里以及未来是否应该更改新型号的老代码”这些工程问题。 什么是类别和对象模板和产品之间的区别必须明确类是抽象模板不占用内存对象是在堆上分配空间的具体例子。很多人写完了class Person急着调整方法却忘了没有new Person()没有真正可操作的个体。类中定义的字段(如String name只是“每个对象都应该有这个名字”实际值只存在于每个对象自己的内存块中类中的方法(如void speak()代码只存储一份(方法区)但每次调用时this指的是当前的具体对象错误示范Person.name 张三——name是实例变量不能直接用类名访问编译错误报告non-static variable name cannot be referenced from a static context不加封装 private 完成:重点是“可控访问路径”封装的核心不是防人而是防错——让字段只能通过你设计的方式读写校验、日志、触发更新等逻辑可以插入中间。private String id;这是起点但真正起作用的是你写的public void setId(String id)方法体中是否有非空判断格式验证不要为了“包装”而包装如果一个字段总是只在这个类别中使用而且没有业务规则约束则强制塞 getter/setter 相反增加冗余常见坑在setter里直接赋值this.id id;忘记深拷贝可变对象(例如(例如)private List tags;外部引用后会改变污染的内部状态只有继承和多态合作才能释放力量:引用父类 子类对象是关键组合单写class Dog extends Animal没用真正体现出来 OOP 价值是在运行过程中动态决定行为——即使用Animal a new Dog(); a.makeSound();这种写法。必须重写Override父类方法否则调用父类默认实现子类构造器的第一行默认情况是super()如果父类没有参构造器子类必须显式调用super(...)否则编译失败不要滥用继承例如Car和Engine这是一种“有”关系应该使用组合private Engine engine;而不是继承——继承表达“是一个”Dog is an Animal选择抽象类和接口看你是想约束“是什么”还是“能做什么”abstract class常见的骨架适合描述一种东西(例如它们都有name、都必须实现move()还可提供默认实现interface专注于定义能力合同(例如(例如)Flyable、Serializable支持类实现多个接口。JDK 8 接口可以有default方法但不能有结构器或实例字段——它始终是行为准则而不是实体模板抽象类可以有结构器、成员变量、静态方法和具体方法接口不好。因此当您需要共享状态或初始逻辑时抽象类更合适容易忽略的点接口中的字段自动public static final即使不写也不要在界面中定义可变常量(比如int COUNT 0;这是反模式真正困难的从来不是写符合语法的 OOP 代码但判断一个功能应该分为几类哪些应该继承哪些应该组合哪些行为应该抽象成界面——这些决定没有标准答案只取决于你是否清楚地理解业务边界。

相关文章:

在Java中什么是面向对象编程思想

Java面向对象编程的本质是用类建模事物、对象承载状态、包装、继承和多态组织逻辑;类是抽象模板,对象是具体的例子;包装注重可控访问,继承表达“一”,组合表达“一”,界面定义能力合同,抽象类提…...

Java中的并发工具类与ConcurrentHashMap

ConcurrentHashMap 不能用 put 替代 computeIfAbsent,因 put 初始化的原子性不能保证,但原子性不能保证 computeIfAbsent 通过 RESERVED 状态、CAS 并保证分段锁 key 对应 value 只创建一次。ConcurrentHashMap 为什么不能直接使用? put 替代…...

Shiro无回显漏洞实战:JRMP协议探测与内存马注入技巧

1. Shiro无回显漏洞的困境与突破 很多安全工程师都遇到过这样的尴尬场景:明明通过工具扫描发现了Shiro框架的加密密钥(key),但在实际利用时却发现目标系统没有任何回显。这种情况就像拿到了保险箱密码却发现箱子里空空如也&#x…...

国产化替代实战:银河麒麟V10+ARM平台如何绕过Docker 18限制跑KubeSphere 3.3

国产化ARM平台容器化突围:银河麒麟V10部署KubeSphere 3.3全实战指南 当国产化替代遇上云原生技术栈,技术团队往往需要在不完善的生态中寻找突破口。银河麒麟V10作为国产操作系统的代表,其ARM架构版本在部署最新版KubeSphere时面临的核心矛盾在…...

企业级NAS如何为vSphere提供高性能共享存储?ISCSI优化配置与容量监控技巧

企业级NAS与vSphere深度整合:ISCSI性能调优与智能监控实战 在虚拟化架构中,存储性能往往成为制约整体系统效率的关键瓶颈。根据实际运维数据显示,超过60%的vSphere性能问题可追溯至存储子系统配置不当。本文将深入剖析如何通过ISCSI协议实现企…...

哈工大集合论与图论慕课答案全解析(2022最新版)——附对比选项技巧

哈工大集合论与图论慕课高效学习指南:解题策略与知识点精要 引言:如何高效攻克集合论与图论慕课 集合论与图论作为计算机科学和数学的重要基础课程,在哈工大慕课平台上吸引了大量学习者。然而,许多同学在学习过程中常常陷入"…...

30 分钟生成学生成绩管理系统!飞算 JavaAI 从需求到落地实战

使用飞算 JavaAI 快速生成学生成绩管理系统 系统需求分析 学生成绩管理系统通常包含以下核心功能: 学生信息管理(增删改查)成绩录入与统计(科目、班级、个人维度)数据导出(Excel或PDF报表)用…...

从Swan语言到Scade 6:一份给嵌入式开发者的官方文档学习路线图

从Swan语言到Scade 6:嵌入式开发者的高效学习路径 当你在Swan语言的官方教程中频繁遇到"假设读者已掌握Scade 6基础"的提示时,是否感到一丝迷茫?作为嵌入式开发领域的从业者,我完全理解这种技术栈切换带来的困惑。本文将…...

别急着扔!用这3个Windows系统设置,让你的老电脑再战三年

别急着扔!用这3个Windows系统设置,让你的老电脑再战三年 手里那台老电脑开机要三分钟,开个浏览器都能卡成PPT?先别急着下单买新机。作为从业十年的系统调优师,我见过太多被"硬件升级"思维定式耽误的老设备—…...

MySQL慢查询开启与分析优化案例

一、前言1.1 什么是慢查询日志慢查询日志是MySQL提供的一种性能诊断工具,用于记录执行时间超过指定阈值的SQL语句。通过分析这些“慢SQL”,可以精准定位数据库性能瓶颈,优化索引、SQL写法或表结构。1.2 基础知识要求MySQL基础:熟悉…...

【深度学习】遥感影像变化检测:从模型演进到实战选型

1. 遥感影像变化检测:从“找不同”到“智能感知” 还记得小时候玩的“找不同”游戏吗?给你两张看似一样的图片,让你圈出其中的差异点。遥感影像变化检测,本质上就是给地球这个“大家伙”玩一场超级复杂的“找不同”游戏。只不过&a…...

redis的数据类型及java调用案例

Redis 的丰富数据类型是它能够适应多种场景的核心原因。下面我会结合 Java&#xff08;Jedis 客户端&#xff09; 的代码示例&#xff0c;为你展示每种类型的典型用法和应用场景。1. 准备工作&#xff1a;Java 连接 Redisxml<!-- Maven 依赖 --> <dependency> <…...

Nanbeige 4.1-3B清爽WebUI效果展示:支持语音输入转文字+AI回复一体化

Nanbeige 4.1-3B清爽WebUI效果展示&#xff1a;支持语音输入转文字AI回复一体化 1. 引言&#xff1a;当AI对话遇见极简美学 想象一下&#xff0c;你打开一个AI对话界面&#xff0c;看到的不是拥挤的侧边栏、死板的方形头像和密密麻麻的按钮&#xff0c;而是一个像手机短信应用…...

A*算法是路径规划领域的经典算法,但在实际应用中可能存在一些不足。为了提高效率和效果,我们可以对其进行改进

改进A*算法 算法对比 数据详细 路径规划算法 Matlab 传统A*算法 先来看传统A*算法的基本框架&#xff1a; function path aStarSearch(grid, start, goal)% 初始化优先队列priorityQueue [];% 评估函数值g zeros(size(grid));h ones(size(grid));% 父节点记录parent ze…...

保姆级教程:用Android Studio CPU Profiler分析视频播放卡顿问题(含火焰图解读技巧)

深度解析Android视频播放卡顿&#xff1a;CPU Profiler实战与火焰图精读指南 当你在开发一款视频类应用时&#xff0c;是否遇到过这样的场景&#xff1a;用户反馈播放高清视频时频繁卡顿&#xff0c;评论区充斥着"一卡一卡的"、"看着头晕"的差评&#xff1…...

Linux下frp内网穿透实战:从零搭建安全高效的远程访问通道

1. 为什么你需要frp内网穿透&#xff1f; 想象一下这个场景&#xff1a;你在家里搭建了一个NAS存储服务器&#xff0c;存满了珍贵的家庭照片和工作文档&#xff1b;或者你在办公室的Linux服务器上部署了一个内部使用的Web应用。这些服务运行得非常好&#xff0c;但有个致命问题…...

CUDA编程避坑指南:共享内存Bank Conflict的实战排查与优化(附NVIDIA Nsight工具使用)

CUDA共享内存性能调优实战&#xff1a;从Bank Conflict诊断到Nsight工具链深度解析 当你的CUDA Kernel性能提升陷入瓶颈时&#xff0c;共享内存可能是那个既熟悉又陌生的关键因素。作为GPU编程中最接近寄存器速度的内存资源&#xff0c;共享内存理论上能带来数量级的加速&…...

微信小程序滚动加载实战:如何避免列表卡顿(附完整代码)

微信小程序滚动加载实战&#xff1a;如何避免列表卡顿&#xff08;附完整代码&#xff09; 在移动互联网时代&#xff0c;用户体验的流畅度直接决定了产品的留存率。对于微信小程序开发者而言&#xff0c;列表滚动卡顿是一个常见但棘手的问题&#xff0c;尤其是在电商商品列表、…...

Mininet与OpenFlow控制器集成指南:从Floodlight到OpenDaylight

Mininet与OpenFlow控制器集成指南&#xff1a;从Floodlight到OpenDaylight 引言 在软件定义网络&#xff08;SDN&#xff09;的研究与开发中&#xff0c;Mininet作为轻量级网络仿真工具已成为不可或缺的利器。它能在单台机器上快速构建包含虚拟主机、交换机和控制器的完整网络环…...

Python新手必看:如何快速解决‘str‘ object has no attribute ‘to‘错误(附真实案例)

Python新手必看&#xff1a;如何快速解决str object has no attribute to错误&#xff08;附真实案例&#xff09; 刚接触Python编程时&#xff0c;遇到各种报错信息总是让人头疼不已。其中AttributeError: str object has no attribute to这类错误尤为常见&#xff0c;它看似简…...

YOLOv8实战:从检测框到中心坐标的精准提取与应用

1. 为什么需要提取物体中心坐标&#xff1f; 在目标检测任务中&#xff0c;我们通常使用边界框&#xff08;bounding box&#xff09;来标识物体的位置。但很多时候&#xff0c;仅仅知道物体的边界框是不够的。比如在做物体追踪时&#xff0c;我们需要一个更简洁的表示方式——…...

GME-Qwen2-VL-2B软件重构指南:识别并改善代码中的耦合过度问题

GME-Qwen2-VL-2B软件重构指南&#xff1a;识别并改善代码中的耦合过度问题 你是不是也遇到过这样的场景&#xff1f;接手一个老项目&#xff0c;想改一个功能&#xff0c;结果发现牵一发而动全身&#xff0c;改A模块的代码&#xff0c;B、C、D模块都跟着报错。或者&#xff0c…...

信号与系统实战:5个拉普拉斯变换典型例题解析(附MATLAB验证代码)

信号与系统实战&#xff1a;5个拉普拉斯变换典型例题解析&#xff08;附MATLAB验证代码&#xff09; 拉普拉斯变换作为信号与系统课程的核心工具&#xff0c;其工程价值往往被理论教学的抽象性所掩盖。许多电子信息工程专业的学生能够熟练背诵变换公式&#xff0c;却在面对实际…...

保姆级教程:用OpenVINO在Intel显卡上跑通PP-OCRv5文字识别(附环境配置避坑指南)

保姆级教程&#xff1a;用OpenVINO在Intel显卡上跑通PP-OCRv5文字识别&#xff08;附环境配置避坑指南&#xff09; 在数字化转型浪潮中&#xff0c;光学字符识别&#xff08;OCR&#xff09;技术已成为企业文档处理、票据识别和自动化办公的核心工具。飞桨推出的PP-OCRv5以其…...

【C#避坑实战系列文章08】C#并行处理资源瓶颈诊断:用PerformanceCounter定位CPU/内存热点,优化并行度与算法

1. 从监控到诊断&#xff1a;PerformanceCounter的进阶玩法 很多C#开发者都遇到过这样的场景&#xff1a;你的并行处理程序在服务器上跑得风生水起&#xff0c;突然某天运维同事怒气冲冲地找上门——"你们的服务又把服务器CPU吃满了&#xff01;"。你打开任务管理器&…...

病理图像处理新手必看:SVS和TIFF格式转换的5个实用技巧(附代码示例)

病理图像处理新手必看&#xff1a;SVS和TIFF格式转换的5个实用技巧&#xff08;附代码示例&#xff09; 在医学研究和人工智能开发领域&#xff0c;病理图像处理已成为不可或缺的关键环节。对于刚接触这一领域的研究人员和开发者来说&#xff0c;如何高效处理SVS和TIFF这两种主…...

HFSS仿真教程:用Ansys还原AirPods蓝牙天线设计(含LDS工艺参数)

HFSS仿真教程&#xff1a;用Ansys还原AirPods蓝牙天线设计&#xff08;含LDS工艺参数&#xff09; 当拆解AirPods时&#xff0c;最令人惊叹的莫过于其内部精密的天线设计——如何在如此紧凑的空间内实现稳定的蓝牙连接&#xff1f;这正是射频工程师需要掌握的三维电磁场仿真技术…...

信创实战:在麒麟V10上构建.NET 6与金仓数据库的完整应用栈

1. 环境准备&#xff1a;从零搭建国产化开发平台 第一次在麒麟V10上折腾.NET 6和金仓数据库时&#xff0c;我踩了不少坑。记得当时为了找个靠谱的安装指南&#xff0c;翻遍了各种论坛和技术文档。现在把完整流程梳理出来&#xff0c;希望能帮你少走弯路。 硬件配置建议&#xf…...

计算机组成原理实验避坑指南:原码乘法运算器的寄存器级联问题详解

计算机组成原理实验避坑指南&#xff1a;原码乘法运算器的寄存器级联问题详解 在计算机组成原理的实验课程中&#xff0c;原码乘法运算器的设计是一个经典而富有挑战性的项目。许多学生在完成这个实验时&#xff0c;往往会遇到各种意想不到的问题&#xff0c;尤其是在A寄存器和…...

Confluence数据安全指南:手动备份+定时任务全流程(附30天自动清理脚本)

Confluence数据安全实战&#xff1a;从手动备份到智能清理的完整方案 在数字化协作时代&#xff0c;Confluence作为企业知识管理的核心平台&#xff0c;承载着大量关键业务数据。一次意外的数据丢失可能导致数月的工作成果付诸东流&#xff0c;而合理的备份策略则是抵御这类风险…...