Java三剑客:封装、继承、多态的魔法世界
第一章:封装的艺术 —— 保护你的宝藏
案例分析:银行账户系统
想象一下,你正在构建一个银行账户系统。每个账户都有一个余额,这个余额需要受到严格的保护,不能被随意修改。我们可以通过封装来实现这一目标。
示例代码:
public class BankAccount {private double balance; // 私有变量,不允许直接访问public BankAccount(double initialBalance) {if (initialBalance > 0.0) {balance = initialBalance;} else {balance = 0.0;}}// 提供公共方法存款public void deposit(double amount) {if (amount > 0.0) {balance += amount;}}// 提供公共方法取款public boolean withdraw(double amount) {if (amount <= balance) {balance -= amount;return true;} else {return false;}}// 提供公共方法查询余额public double getBalance() {return balance;}
}
在这个例子中,balance被声明为私有变量,只能通过deposit()、withdraw()和getBalance()方法进行访问和修改。这样,我们就能确保账户的安全性和一致性。
第二章:继承的传承 —— 父亲的衣钵
案例分析:动物王国
在Java中,继承允许我们创建一个类族谱,使得子类可以继承父类的属性和方法,从而实现代码的复用和扩展。
示例代码:
// 定义一个父类 Animal
public abstract class Animal {protected String name;protected int age;public Animal(String name, int age) {this.name = name;this.age = age;}public abstract void makeSound(); // 抽象方法,强制子类实现
}// 定义一个子类 Dog,继承自 Animal
public class Dog extends Animal {public Dog(String name, int age) {super(name, age);}@Overridepublic void makeSound() {System.out.println("Woof woof!");}
}// 定义另一个子类 Cat,继承自 Animal
public class Cat extends Animal {public Cat(String name, int age) {super(name, age);}@Overridepublic void makeSound() {System.out.println("Meow meow!");}
}public class Main {public static void main(String[] args) {Animal myDog = new Dog("Buddy", 3);Animal myCat = new Cat("Whiskers", 2);myDog.makeSound(); // 输出: Woof woof!myCat.makeSound(); // 输出: Meow meow!}
}
在这个例子中,Animal类作为基类,定义了一个makeSound()抽象方法,所有继承自它的子类(如Dog和Cat)都必须实现这个方法。这样,我们就能够通过一个统一的接口(即Animal类)来处理不同类型的动物,体现了继承的优势。
第三章:多态的魔法 —— 变身大师的技能
案例分析:图形绘制系统
在Java中,多态允许我们编写更加灵活和通用的代码,通过多态,同一段代码可以处理不同类型的对象,具体的行为由运行时对象的实际类型决定。
示例代码:
// 定义一个图形接口 Shape
public interface Shape {double calculateArea();
}// 实现 Shape 接口的 Circle 类
public class Circle implements Shape {private double radius;public Circle(double radius) {this.radius = radius;}@Overridepublic double calculateArea() {return Math.PI * radius * radius;}
}// 实现 Shape 接口的 Rectangle 类
public class Rectangle implements Shape {private double width;private double height;public Rectangle(double width, double height) {this.width = width;this.height = height;}@Overridepublic double calculateArea() {return width * height;}
}public class Main {public static void main(String[] args) {Shape circle = new Circle(5);Shape rectangle = new Rectangle(4, 6);System.out.println("Circle area: " + circle.calculateArea()); // 输出: Circle area: 78.53981633974483System.out.println("Rectangle area: " + rectangle.calculateArea()); // 输出: Rectangle area: 24.0}
}
在这个例子中,我们定义了一个Shape接口,以及两个实现该接口的类Circle和Rectangle。通过多态,我们可以使用Shape类型的引用指向任何实现了Shape接口的对象,并调用其calculateArea()方法。这样,我们就可以写出通用的代码,处理任意形状的图形,极大地提高了代码的灵活性和可扩展性。
设计模式与面向对象原则
深入理解封装、继承和多态之后,你将发现它们是许多高级编程概念和设计模式的基础。比如:
-
单一职责原则:一个类应该只有一个引起它变化的原因,这正是封装思想的体现。例如,在
BankAccount类中,我们通过将balance设置为私有变量,并提供公共方法来操作它,确保了账户的职责清晰。 -
开放封闭原则:对扩展开放,对修改关闭。继承和多态机制是实现这一原则的关键。例如,在
Animal类的例子中,我们定义了一个抽象方法makeSound(),所有的子类都必须实现这个方法。这样,当我们需要添加新的动物类型时,只需创建一个新的子类即可,无需修改现有代码。 -
工厂模式:这是一种常用的创建型设计模式,用于封装对象的创建过程。通过工厂方法,我们可以根据传入的参数动态地创建对象,而无需指定具体的类。结合继承和多态,工厂模式可以提供非常灵活的对象创建机制。
-
策略模式:这是一种行为型设计模式,允许在运行时选择算法或行为。通过定义一组算法接口,然后让不同的策略类实现这些接口,我们可以根据实际需求动态地切换策略,这充分体现了多态的灵活性。
相关文章:
Java三剑客:封装、继承、多态的魔法世界
第一章:封装的艺术 —— 保护你的宝藏 案例分析:银行账户系统 想象一下,你正在构建一个银行账户系统。每个账户都有一个余额,这个余额需要受到严格的保护,不能被随意修改。我们可以通过封装来实现这一目标。 示例代…...
0145__Linux的capability
https://zhuanlan.zhihu.com/p/693896673 Linux的capability深入分析(1)_linux 设置进程capprm-CSDN博客 cap_init(3) - Linux manual page...
# Redis 入门到精通(一)数据类型(4)
Redis 入门到精通(一)数据类型(4) 一、redis 数据类型–sorted_set实现时效性任务管理 1、sorted_set 类型数据操作的注意事项 score 保存的数据存储空间是64位,如果是整数范围是-9007199254740992~9007199254740992…...
西邮计科嵌入式复习
西邮嵌入式复习 一、第一章复习二、第二章复习三、第三章复习四、第四章复习 一、第一章复习 二、第二章复习 三、第三章复习 四、第四章复习...
Java如何使用 HttpClientUtils 发起 HTTP 请求
Java如何使用 HttpClientUtils 发起 HTTP 请求 一、前言1.HttpClientUtils 类概览2.解析 HttpClientUtils 类3.使用 HttpClientUtils 类 一、前言 在现代的软件开发中,经常需要与远程服务器进行通信,例如获取数据或发送数据。Apache HttpClient 是一个流…...
无人机的工作原理
无人飞行器(UAV,即Unmanned Aerial Vehicle)的工作原理涉及多个复杂的系统和技术。以下是对各个系统和技术的详细介绍: 1. 飞行控制系统(FCS) 飞行控制系统是无人机的“大脑”,负责监控和调整…...
敏捷开发笔记(第10章节)--Liskov原则(LSP)
目录 1:PDF上传链接 10.1 Liskov替换原则(LSP) 10.2 一个违反LSP的简单例子 10.6 启发式规则和习惯用法 10.7 结论 1:PDF上传链接 【免费】敏捷软件开发(原则模式与实践)资源-CSDN文库 OCP背后的主要机制是抽象(abstraction…...
基于SSM的校园一卡通管理系统的设计与实现
摘 要 本报告全方位、深层次地阐述了校园一卡通管理系统从构思到落地的整个设计与实现历程。此系统凭借前沿的 SSM(Spring、Spring MVC、MyBatis)框架精心打造而成,旨在为学校构建一个兼具高效性、便利性与智能化的一卡通管理服务平台。 该系…...
新版Android Studio中设置gradle的JDK版本
旧版android studio 在旧版(具体哪个版本号之前搞不清了)中设置JDK版本在>File——>Project Structure——>SDK location——>Gradle Setting——>Gradle SDK 新版android studio 某次更新后发现SDK location下找不到Gradle Setting选项…...
打造你的智能家居指挥中心:基于STM32的多协议(zigbee、http)网关(附代码示例)
1. 项目概述 随着物联网技术的蓬勃发展,智能家居正逐步融入人们的日常生活。然而,市面上琳琅满目的智能家居设备通常采用不同的通信协议,导致不同品牌设备之间难以实现互联互通。为了解决这一难题,本文设计了一种基于STM32的多协…...
【基于R语言群体遗传学】-16-中性检验Tajima‘s D及连锁不平衡 linkage disequilibrium (LD)
Tajimas D Test 已经开发了几种中性检验,用于识别模型假设的潜在偏差。在这里,我们将说明一种有影响力的中性检验,即Tajimas D(Tajima 1989)。Tajimas D通过比较数据集中的两个𝜃 4N𝜇估计值来…...
防火墙组网与安全策略实验
实验要求: 实现: 防火墙接口配置: 所有接口均配置为三层接口 由于G1/0/3口下为vlan环境,所以防火墙需要配置子接口 : 交换机划分vlan分开生产区和办公区、配置trunk干道 : 安全策略: 生产区访…...
xmind梳理测试点,根据这些测试点去写测试用例
基本流(冒烟用例必写) 备选流 公共测试点:...
MICCAI 2024 每日一篇论文 纯纯直读 CUTS:用于多粒度无监督医学图像分割的深度学习和拓扑框架
MICCAI 2024 CUTS: A Deep Learning and Topological Framework for Multigranular Unsupervised Medical Image Segmentation CUTS: 用于多粒度无监督医学图像分割的深度学习和拓扑框架 作者 陈璐1*、Matthew Amodio1*、梁博伦.沈2、冯高3、阿曼阿维斯塔4、Sanjay Aneja3,5…...
实验9 存储过程与函数的创建管理实验
一、实验目的: 理解存储过程和函数的概念。掌握创建存储过程和函数的方法。掌握执行存储过程和函数的方法。掌握游标的定义、使用方法。 二、实验内容 1.某超市的食品管理的数据库的Food表,Food表的定义如表所示, Food表的定义…...
计算机网络--tcpdump和iptable设置、内核参数优化策略
tcpdump工具 tcpdump命令: 选项字段: 过滤表达式: 实用命令: TCP三次握手抓包命令: #客户端执行tcpdump 抓取数据包 tcpdump -i etho tcp and host 192.168.12.36 and port 80 -W timeout.pcapnetstat命令 netst…...
Vue3框架搭建2:axios+typescript封装
仓库地址:https://github.com/buguniao5213/LuArch 1、安装axios npm install axios2、创建文件 先创建一个文件夹: ├── src/ │ ├── api/ │ │ ├── index.ts/ #编写axios封装代码 │ │ └── example.ts/ #定义…...
【机器学习】使用决策树分类器预测汽车安全性的研究与分析
文章目录 一、决策树算法简介决策树的结构分类和回归树 (CART)决策树算法术语决策树算法直觉 二、属性选择度量信息增益熵 基尼指数计算分割基尼指数的步骤 三、决策树算法中的过度拟合避免过度拟合的方法 四、导入库和数据可视化探索性数据分析重命名列名查看数据集的总结信息…...
【香橙派 Orange pi AIpro】| 开发板深入使用体验
目录 一. 🦁 写在前面二. 🦁 愉快的安装流程2.1 安装前准备2.2 流程准备2.2.1 烧录镜像2.2.2 开机2.2.3 连网2.2.4 SSH远程连接开发板 2.3 体验 AI 应用样例 三. 🦁 写在最后 一. 🦁 写在前面 大家好,我是狮子呀&…...
初识Laravel(Laravel的项目搭建)
初识Laravel(Laravel的项目搭建) 一、项目简单搭建(laravel)1.首先我们确保使用国内的 Composer 加速镜像([加速原理](https://learnku.com/php/wikis/30594)):2.新建一个名为 Laravel 的项目&a…...
FPGA设计优化:如何用Vivado的opt_directive提升性能(附真实案例)
FPGA设计优化:Vivado的opt_directive实战指南与性能提升策略 在FPGA设计流程中,逻辑优化是提升性能的关键环节。Xilinx Vivado Design Suite提供的opt_design命令及其directive参数,为工程师提供了精细控制优化策略的能力。本文将深入探讨如何…...
次元画室一键部署教程:Python环境快速配置与模型启动
次元画室一键部署教程:Python环境快速配置与模型启动 你是不是也对AI绘画感兴趣,想自己动手试试,结果被复杂的Python环境、CUDA版本、模型权重这些术语给吓退了?别担心,这种感觉我太懂了。几年前我第一次接触这些时&a…...
Ostrakon-VL-8B实战:利用Git进行多模态模型版本管理与协作开发
Ostrakon-VL-8B实战:利用Git进行多模态模型版本管理与协作开发 在餐饮AI项目的开发过程中,我们常常会遇到这样的场景:数据科学家调整了Ostrakon-VL-8B的微调参数,工程师更新了模型推理的接口代码,产品经理则迭代了用于…...
日本留学中介避坑指南:免费申请与实体保障,哪种模式更适合你?
摘要随着赴日留学热度持续攀升,市面上的日本留学中介机构也如雨后春笋般涌现。对于计划通过语言学校过渡并升学的学生及家庭而言,如何在‘免费申请’与‘传统收费’、‘线上服务’与‘实体保障’之间做出抉择,往往充满困惑与信息不对称。本文…...
3个步骤解锁QQ音乐加密文件:QMCDecode让音乐重获自由
3个步骤解锁QQ音乐加密文件:QMCDecode让音乐重获自由 【免费下载链接】QMCDecode QQ音乐QMC格式转换为普通格式(qmcflac转flac,qmc0,qmc3转mp3, mflac,mflac0等转flac),仅支持macOS,可自动识别到QQ音乐下载目录,默认转…...
mPLUG-Owl3-2B多模态交互工具效果展示:高精度图像理解+自然语言问答真实案例
mPLUG-Owl3-2B多模态交互工具效果展示:高精度图像理解自然语言问答真实案例 1. 开篇:多模态交互的全新体验 想象一下,你随手拍了一张照片,然后像和朋友聊天一样问:"这张图片里有什么有趣的东西?&quo…...
STM32CubeIDE开发环境详解与实战指南
STM32CubeIDE开发环境全解析:从入门到实战1. 开发环境概述1.1 STM32CubeIDE核心特性STM32CubeIDE是基于Eclipse框架的集成开发环境,专为STM32微控制器设计。其主要技术特性包括:集成STM32CubeMX配置工具内置GCC编译工具链支持GDB调试接口跨平…...
Phi-3-mini-128k-instruct实战案例:中小企业技术文档自动解析与结构化提取
Phi-3-mini-128k-instruct实战案例:中小企业技术文档自动解析与结构化提取 1. 项目背景与价值 对于中小企业而言,技术文档管理一直是个令人头疼的问题。工程师们经常需要从大量PDF、Word文档中提取关键信息,手动整理成结构化数据。这个过程…...
如何快速掌握React Email Editor:深入理解拖拽邮件编辑器的实现原理
如何快速掌握React Email Editor:深入理解拖拽邮件编辑器的实现原理 【免费下载链接】react-email-editor Drag-n-Drop Email Editor Component for React.js 项目地址: https://gitcode.com/gh_mirrors/re/react-email-editor React Email Editor是一个功能…...
南北阁4.1-3B WebUI代码实例:TextIteratorStreamer多线程流式实现解析
南北阁4.1-3B WebUI代码实例:TextIteratorStreamer多线程流式实现解析 今天咱们来聊聊一个特别有意思的项目——一个为南北阁4.1-3B模型量身定做的Web交互界面。如果你用过Streamlit,可能会觉得它的界面有点“官方”,布局也比较固定。但这个…...
