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

Java封装、继承、多态和抽象深度解析

在软件工程的世界里,面向对象编程(OOP)是一种编程范式,它使用“对象”来设计软件。对象可以封装数据和方法,以提高代码的复用性、可维护性和可扩展性。Java作为一门面向对象的编程语言,提供了四个基本的面向对象概念:封装(Encapsulation)、继承(Inheritance)、多态(Polymorphism)和抽象(Abstraction)。这四个概念是理解和掌握Java编程的关键。本文将逐一解析这四大金刚,并通过详细的Java示例来加深理解。

封装(Encapsulation):保护你的数据

封装是面向对象编程中的一个核心概念。它是指将对象的状态(属性)和行为(方法)结合在一起,同时对外界隐藏对象的内部实现细节。封装的主要目的是提高软件的安全性、简化接口,并允许开发者修改内部实现而不影响其他部分的功能。

Java示例:封装一个类

public class Account {// 私有属性,外部无法直接访问private double balance;// 构造方法public Account(double initialBalance) {if (initialBalance > 0) {balance = initialBalance;}}// 公有方法,允许外部通过这些方法来访问和修改私有属性public void deposit(double amount) {if (amount > 0) {balance += amount;}}public void withdraw(double amount) {if (amount <= balance) {balance -= amount;}}public double getBalance() {return balance;}
}

在这个Account类中,我们将balance属性设置为私有的,这意味着它只能通过类内部的方法来访问和修改。我们提供了depositwithdraw方法来操作账户余额,并通过getBalance方法来获取当前余额。这样,我们就封装了账户的余额操作细节,并提供了一个简单的接口给外部使用。

继承(Inheritance):站在巨人的肩膀上

继承是面向对象编程的另一个基石。它允许一个类(子类)继承另一个类(父类)的特性和行为。继承的主要好处是它支持代码的重用,并且可以建立类之间的层次关系。

Java示例:使用继承创建子类

// 父类
public class Vehicle {public void move() {System.out.println("This vehicle is moving.");}
}// 子类
public class Car extends Vehicle {@Overridepublic void move() {super.move(); // 调用父类方法System.out.println("The car is moving on the road.");}
}// 使用
public class Test {public static void main(String[] args) {Car myCar = new Car();myCar.move(); // 输出: This vehicle is moving. The car is moving on the road.}
}

在这个例子中,Car类继承了Vehicle类。Car类重写了move方法,在保持原有功能的基础上增加了一些额外的行为。这体现了继承的一个重要特性:扩展。

多态(Polymorphism):同一接口,多种实现

多态是指允许不同类的对象对同一消息做出响应。换句话说,同一个接口,使用不同的实例而执行不同操作。多态性可以增加程序的灵活性和可扩展性。

Java示例:多态的实现

// 父类
public class Shape {public void draw() {System.out.println("Drawing a shape.");}
}// 子类
public class Circle extends Shape {@Overridepublic void draw() {System.out.println("Drawing a circle.");}
}// 子类
public class Rectangle extends Shape {@Overridepublic void draw() {System.out.println("Drawing a rectangle.");}
}// 使用多态
public class Test {public static void main(String[] args) {Shape shape1 = new Circle();Shape shape2 = new Rectangle();shape1.draw(); // 输出: Drawing a circle.shape2.draw(); // 输出: Drawing a rectangle.}
}

在这个例子中,Shape是一个父类,而CircleRectangle是它的两个子类。尽管每个子类都有自己的draw方法实现,但是我们可以使用父类类型的引用(例如Shape)来调用实际子类的方法,这就是多态的体现。

抽象(Abstraction):只关注行为

抽象是简化复杂的现实世界问题的方法,它允许我们创建可以代表抽象概念和行为的类和对象。在Java中,抽象是通过抽象类和接口实现的。

Java示例:抽象类和方法

// 抽象类
public abstract class Animal {// 抽象方法public abstract void makeSound();public void eat() {System.out.println("This animal eats food.");}
}// 具体类
public class Dog extends Animal {@Overridepublic void makeSound() {System.out.println("The dog barks.");}
}// 使用
public class Test {public static void main(String[] args) {Animal myDog = new Dog();myDog.makeSound(); // 输出: The dog barks.myDog.eat(); // 输出: This animal eats food.}
}

在这个例子中,Animal是一个抽象类,它定义了一个抽象方法makeSoundDog类继承自Animal类,并提供了makeSound方法的具体实现。这样,我们就可以在不知道具体动物类型的情况下,编写可以处理任何动物类型的代码。

通过这四大金刚,Java为我们提供了一个强大的面向对象编程工具集,使我们能够构建灵活、可扩展、易于维护的软件系统。掌握这些概念是成为一名优秀Java开发者的重要步骤。

相关文章:

Java封装、继承、多态和抽象深度解析

在软件工程的世界里&#xff0c;面向对象编程&#xff08;OOP&#xff09;是一种编程范式&#xff0c;它使用“对象”来设计软件。对象可以封装数据和方法&#xff0c;以提高代码的复用性、可维护性和可扩展性。Java作为一门面向对象的编程语言&#xff0c;提供了四个基本的面向…...

深度学习每周学习总结P3(天气识别)

&#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客&#x1f356; 原作者&#xff1a;K同学啊 | 接辅导、项目定制 数据链接 提取码&#xff1a;o3ix 目录 0. 总结1. 数据导入部分数据导入部分代码详解&#xff1a;a. 数据读取部分a.1 提问&#xff1a;关…...

通过iOS网络抓包工具实现移动应用数据安全监控

摘要 本文将深入探讨iOS平台上常用的网络抓包工具&#xff0c;包括Charles、克魔助手、Thor和Http Catcher&#xff0c;以及通过SSH连接进行抓包的方法。此外&#xff0c;还介绍了克魔开发助手作为iOS应用开发的辅助工具&#xff0c;提供的全方面性能监控和调试功能。 在iOS应…...

Stable Diffusion WebUI 生成参数:脚本(Script)——提示词矩阵、从文本框或文件载入提示词、X/Y/Z图表

本文收录于《AI绘画从入门到精通》专栏,专栏总目录:点这里,订阅后可阅读专栏内所有文章。 大家好,我是水滴~~ 在本篇文章中,我们将深入探讨 Stable Diffusion WebUI 的另一个引人注目的生成参数——脚本(Script)。我们将逐一细说提示词矩阵、从文本框或文件导入提示词,…...

synchronized和volatile的原理及应用

文章目录 synchronized的实现原理及应用升级锁代码示例volatile原理及应用代码示例线程不安全类 synchronized的实现原理及应用 synchronized 是Java中用于实现线程同步的关键字&#xff0c;可以应用于方法或代码块&#xff0c;确保在多线程环境下对共享资源的安全访问。下面是…...

Python 基于 OpenCV 视觉图像处理实战 之 OpenCV 简单实战案例 之九 简单闪烁效果

Python 基于 OpenCV 视觉图像处理实战 之 OpenCV 简单实战案例 之九 简单闪烁效果 目录 Python 基于 OpenCV 视觉图像处理实战 之 OpenCV 简单实战案例 之九 简单闪烁效果 一、简单介绍 二、简单闪烁效果实现原理 三、简单闪烁效果案例实现简单步骤 四、注意事项 一、简单…...

11 开源鸿蒙OpenHarmony轻量系统源码分析

开源鸿蒙轻量系统源码分析 作者将狼才鲸日期2024-03-28 一、前言 之前单独的LiteOS是通过Makefile编译的&#xff0c;当前的开源鸿蒙LiteOS-M和LiteOS-A是通过gn和ninja编译的。 Gitee官方只介绍了LiteOS-M的gn ninja编译的流程&#xff0c;针对M3使用Keil编译的流程可能要参…...

专题:一个自制代码生成器(嵌入式脚本语言)之应用实例

初级代码游戏的专栏介绍与文章目录-CSDN博客 我的github&#xff1a;codetoys&#xff0c;所有代码都将会位于ctfc库中。已经放入库中我会指出在库中的位置。 这些代码大部分以Linux为目标但部分代码是纯C的&#xff0c;可以在任何平台上使用。 专题&#xff1a;一个自制代码…...

Appium设备交互API

设备交互API指的是操作设备系统中的一些固有功能&#xff0c;而非被测程序的功能&#xff0c;例如模拟来电&#xff0c;模拟发送短信&#xff0c;设置网络&#xff0c;切换横竖屏&#xff0c;APP操作&#xff0c;打开通知栏&#xff0c;录屏等。 模拟来电 make_gsm_call(phon…...

Qlib-Server部署

Qlib-Server部署 介绍 构建Qlib服务器,用户可以选择: 一键部署Qlib服务器逐步部署Qlib服务器一键部署 Qlib服务器支持一键部署,用户可以选择以下两种方法之一进行一键部署: 使用docker-compose部署在Azure中部署使用docker-compose进行一键部署 按照以下步骤使用docker…...

CMC学习系列 (4):β段CMC可以作为一种中风治疗的生物标志物和治疗靶点

CMC学习系列:β段CMC可以作为一种中风治疗的生物标志物和治疗靶点 0. 引言1. 主要贡献2. 方法2.1 相干源动态成像2.2 源统计分析 3. 结果3.1 训练前后比较3.2 源代码分析3.3 皮质重叠的分组分析 4. 讨论5. 总结欢迎来稿 论文地址&#xff1a;https://www.sciencedirect.com/sci…...

jmeter中参数加密

加密接口常用的方式有&#xff1a; MD5&#xff0c;SHA&#xff0c;HmacSHA RSA AES&#xff0c;DES&#xff0c;Base64 压测中有些参数需要进行加密&#xff0c;加密方式已接口文档为主。 MD5加密 比如MD5加密的接口文档&#xff1a; 请求URL&#xff1a;http://101.34.221…...

YOLOv8改进 | 检测头篇 | 2024最新HyCTAS模型提出SAttention(自研轻量化检测头 -> 适用分割、Pose、目标检测)

一、本文介绍 本文给大家带来的改进机制是由全新SOTA分割模型(Real-Time Image Segmentation via Hybrid Convolutional-TransformerArchitecture Search)HyCTAS提出的一种SelfAttention注意力机制,论文中叫该机制应用于检测头当中(论文中的分割效果展现目前是最好的)。我…...

verilog设计-cdc:多比特信号跨时钟域(DMUX)

一、前言 多比特一般为数据&#xff0c;其在跨时钟域传输的过程中有多种处理方式&#xff0c;比如DMUX&#xff0c;异步FIFO&#xff0c;双口RAM&#xff0c;握手处理。本文介绍通过DMUX的方式传输多比特信号。 二、DMUX同步跨时钟域数据 dmux表示数据分配器&#xff0c;该方…...

服务器停止解析域名,但仍然可以访问到

1.centos7 如何刷新dns缓存 在CentOS 7上&#xff0c;DNS缓存由nscd&#xff08;Name Service Cache Daemon&#xff09;管理&#xff0c;如果系统上安装了nscd&#xff0c;可以通过清除nscd缓存来刷新DNS缓存。 要刷新DNS缓存&#xff0c;请执行以下命令&#xff1a; sudo …...

Centos系统与Ubuntu系统防火墙区别,以及firewalld、ufw和iptables三者之前的区别。

现在大多数Centos系统上的防火墙是firewalld&#xff0c;Ubuntu系统上是ufw&#xff0c;而iptables是最底层的防火墙工具。iptables是Linux系统中最早的防火墙工具&#xff0c;并且被许多不同的Linux发行版使用&#xff0c;包括CentOS和Ubuntu。然而&#xff0c;CentOS 7及更高…...

ES6 学习(三)-- es特性

文章目录 1. Symbol1.1 使用Symbol 作为对象属性名1.2 使用Symbol 作为常量 2. Iterator 迭代器2.1 for...of循环2.2 原生默认具备Interator 接口的对象2.3 给对象添加Iterator 迭代器2.4 ... 解构赋值 3. Set 结构3.1 初识 Set3.2 Set 实例属性和方法3.3 遍历3.4 相关面试题 4…...

使用ChatGPT的场景之gpt写研究报告,如何ChatGPT写研究报告

推荐写研究报告使用智能站&#xff1a; dayfire.cn/ 1. 确定研究主题 明确主题&#xff1a;在开始之前&#xff0c;你需要有一个清晰的研究主题。这将帮助AI更好地理解你的需求…...

librdkafka的简单使用

文章目录 摘要kafka是什么安装环境librdkafka的简单使用生产者消费者 摘要 本文是Getting Started with Apache Kafka and C/C的中文版&#xff0c; kafka的hello world程序。 本文完整代码见仓库&#xff0c;这里只列出producer/consumer的代码 kafka是什么 本节来源&#…...

【iOS ARKit】播放3D音频

3D音频 在前面系列中&#xff0c;我们了解如何定位追踪用户&#xff08;实际是定位用户的移动设备&#xff09;的位置与方向&#xff0c;然后通过摄像机的投影矩阵将虚拟物体投影到用户移动设备屏幕。如果用户移动了&#xff0c;则通过VIO 和 IMU更新用户的位置与方向信息&…...

19c补丁后oracle属主变化,导致不能识别磁盘组

补丁后服务器重启&#xff0c;数据库再次无法启动 ORA01017: invalid username/password; logon denied Oracle 19c 在打上 19.23 或以上补丁版本后&#xff0c;存在与用户组权限相关的问题。具体表现为&#xff0c;Oracle 实例的运行用户&#xff08;oracle&#xff09;和集…...

智慧医疗能源事业线深度画像分析(上)

引言 医疗行业作为现代社会的关键基础设施,其能源消耗与环境影响正日益受到关注。随着全球"双碳"目标的推进和可持续发展理念的深入,智慧医疗能源事业线应运而生,致力于通过创新技术与管理方案,重构医疗领域的能源使用模式。这一事业线融合了能源管理、可持续发…...

脑机新手指南(八):OpenBCI_GUI:从环境搭建到数据可视化(下)

一、数据处理与分析实战 &#xff08;一&#xff09;实时滤波与参数调整 基础滤波操作 60Hz 工频滤波&#xff1a;勾选界面右侧 “60Hz” 复选框&#xff0c;可有效抑制电网干扰&#xff08;适用于北美地区&#xff0c;欧洲用户可调整为 50Hz&#xff09;。 平滑处理&…...

基于数字孪生的水厂可视化平台建设:架构与实践

分享大纲&#xff1a; 1、数字孪生水厂可视化平台建设背景 2、数字孪生水厂可视化平台建设架构 3、数字孪生水厂可视化平台建设成效 近几年&#xff0c;数字孪生水厂的建设开展的如火如荼。作为提升水厂管理效率、优化资源的调度手段&#xff0c;基于数字孪生的水厂可视化平台的…...

JDK 17 新特性

#JDK 17 新特性 /**************** 文本块 *****************/ python/scala中早就支持&#xff0c;不稀奇 String json “”" { “name”: “Java”, “version”: 17 } “”"; /**************** Switch 语句 -> 表达式 *****************/ 挺好的&#xff…...

大语言模型(LLM)中的KV缓存压缩与动态稀疏注意力机制设计

随着大语言模型&#xff08;LLM&#xff09;参数规模的增长&#xff0c;推理阶段的内存占用和计算复杂度成为核心挑战。传统注意力机制的计算复杂度随序列长度呈二次方增长&#xff0c;而KV缓存的内存消耗可能高达数十GB&#xff08;例如Llama2-7B处理100K token时需50GB内存&a…...

蓝桥杯 冶炼金属

原题目链接 &#x1f527; 冶炼金属转换率推测题解 &#x1f4dc; 原题描述 小蓝有一个神奇的炉子用于将普通金属 O O O 冶炼成为一种特殊金属 X X X。这个炉子有一个属性叫转换率 V V V&#xff0c;是一个正整数&#xff0c;表示每 V V V 个普通金属 O O O 可以冶炼出 …...

网站指纹识别

网站指纹识别 网站的最基本组成&#xff1a;服务器&#xff08;操作系统&#xff09;、中间件&#xff08;web容器&#xff09;、脚本语言、数据厍 为什么要了解这些&#xff1f;举个例子&#xff1a;发现了一个文件读取漏洞&#xff0c;我们需要读/etc/passwd&#xff0c;如…...

GruntJS-前端自动化任务运行器从入门到实战

Grunt 完全指南&#xff1a;从入门到实战 一、Grunt 是什么&#xff1f; Grunt是一个基于 Node.js 的前端自动化任务运行器&#xff0c;主要用于自动化执行项目开发中重复性高的任务&#xff0c;例如文件压缩、代码编译、语法检查、单元测试、文件合并等。通过配置简洁的任务…...

Caliper 负载(Workload)详细解析

Caliper 负载(Workload)详细解析 负载(Workload)是 Caliper 性能测试的核心部分,它定义了测试期间要执行的具体合约调用行为和交易模式。下面我将全面深入地讲解负载的各个方面。 一、负载模块基本结构 一个典型的负载模块(如 workload.js)包含以下基本结构: use strict;/…...