深入理解Java中的类与对象:封装、继承与多态

深入理解Java中的类与对象:封装、继承与多态

大家好,我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编,也是冬天不穿秋裤,天冷也要风度的程序猿!

在Java编程中,类与对象是核心概念。类是对象的模板,定义了对象的属性和行为;对象是类的实例,通过类创建的具体实体。本文将深入探讨Java中的类与对象,重点介绍面向对象编程的三大特性:封装、继承与多态。

一、封装

封装(Encapsulation)是将对象的状态(属性)和行为(方法)封装在一起,隐藏对象的内部实现细节,只暴露必要的接口给外界。通过封装,可以提高代码的安全性和可维护性。

代码示例:封装
package cn.juwatech.encapsulation;public class Person {private String name;private int age;// 构造方法public Person(String name, int age) {this.name = name;this.age = age;}// Getter 和 Setter 方法public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {if (age > 0) {this.age = age;} else {System.out.println("年龄必须大于0");}}// 显示信息的方法public void displayInfo() {System.out.println("姓名: " + name + ", 年龄: " + age);}
}

在上面的示例中,Person类通过私有属性(nameage)和公有方法(gettersetter)实现了封装。

二、继承

继承(Inheritance)是面向对象编程的一种机制,允许我们创建一个新类,这个新类可以继承一个已经存在的类的属性和方法。继承使代码重用成为可能,并提供了一个自然的层次结构。

代码示例:继承
package cn.juwatech.inheritance;// 父类
public class Animal {private String name;public Animal(String name) {this.name = name;}public void eat() {System.out.println(name + " 正在吃东西。");}public String getName() {return name;}
}// 子类
package cn.juwatech.inheritance;public class Dog extends Animal {public Dog(String name) {super(name);}public void bark() {System.out.println(getName() + " 正在汪汪叫。");}
}

在上面的示例中,Dog类继承了Animal类,Dog类不仅可以访问Animal类的方法,还可以添加自己特有的方法(bark)。

三、多态

多态(Polymorphism)是指同一个行为在不同对象中的不同表现形式。多态可以通过方法重载(编译时多态)和方法重写(运行时多态)来实现。

代码示例:多态
package cn.juwatech.polymorphism;// 父类
public class Shape {public void draw() {System.out.println("绘制形状");}
}// 子类
package cn.juwatech.polymorphism;public class Circle extends Shape {@Overridepublic void draw() {System.out.println("绘制圆形");}
}package cn.juwatech.polymorphism;public class Rectangle extends Shape {@Overridepublic void draw() {System.out.println("绘制矩形");}
}// 测试多态
package cn.juwatech.polymorphism;public class TestPolymorphism {public static void main(String[] args) {Shape shape1 = new Circle();Shape shape2 = new Rectangle();shape1.draw(); // 输出:绘制圆形shape2.draw(); // 输出:绘制矩形}
}

在上面的示例中,Shape类的draw方法被子类CircleRectangle重写,通过多态机制,可以使用父类引用调用子类的方法。

四、封装、继承与多态的综合应用

在实际开发中,封装、继承和多态通常是结合使用的。以下是一个综合应用的示例,展示了如何在一个简单的银行账户系统中应用这些概念。

代码示例:综合应用
package cn.juwatech.bank;// 父类:银行账户
public class BankAccount {private String accountNumber;private double balance;public BankAccount(String accountNumber, double balance) {this.accountNumber = accountNumber;this.balance = balance;}public void deposit(double amount) {if (amount > 0) {balance += amount;}}public void withdraw(double amount) {if (amount > 0 && amount <= balance) {balance -= amount;} else {System.out.println("取款金额无效");}}public double getBalance() {return balance;}public String getAccountNumber() {return accountNumber;}
}// 子类:储蓄账户
package cn.juwatech.bank;public class SavingsAccount extends BankAccount {private double interestRate;public SavingsAccount(String accountNumber, double balance, double interestRate) {super(accountNumber, balance);this.interestRate = interestRate;}public void addInterest() {double interest = getBalance() * interestRate / 100;deposit(interest);}
}// 测试类
package cn.juwatech.bank;public class TestBank {public static void main(String[] args) {SavingsAccount sa = new SavingsAccount("123456", 1000.0, 5.0);sa.deposit(500);sa.withdraw(200);sa.addInterest();System.out.println("余额: " + sa.getBalance()); // 输出:余额: 1365.0}
}

在这个银行账户系统中,我们使用了封装(BankAccount类的私有属性和公有方法)、继承(SavingsAccount继承BankAccount)和多态(通过父类引用调用子类方法)。

结论

通过本文的介绍,我们详细探讨了Java中的类与对象,重点介绍了面向对象编程的三大特性:封装、继承与多态。这些特性是Java编程的基础,可以帮助我们编写更加模块化、易于维护和扩展的代码。在实际开发中,灵活运用这些特性,可以提高代码质量和开发效率。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/36652.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【电路笔记】-MOSFET放大器

MOSFET放大器 文章目录 MOSFET放大器1、概述2、电路图3、电气特性3.1 ** I D = F ( V G S ) I_D=F(V_{GS}) ID​=F(VGS​)**特性3.2 I D = F ( V D S ) I_D=F(V_{DS}) ID​=F(VDS​)特性4、MOSFET放大器5、输入和输出电压6、电压增益7、总结1、概述 在前面的文章中,我们已经…

表单自定义校验获取的value为undefined(element ui)

<el-form :model"form" :rules"rules"><el-form-item label"年龄" prop"age"><el-input v-model.number"form.age"></el-input></el-form-item> </el-form> export default {data() {…

python中的线程与进程

一、线程与进程 在计算机科学中&#xff0c;理解线程和进程的区别是重要的基础知识。这些概念对于多任务操作和并发编程尤为关键。下面将详细介绍线程与进程的区别、特点和各自的使用场景。 1.1 进程&#xff08;Process&#xff09; 进程是操作系统分配资源的基本单位。每个进…

【WPF】Enum与Converter的使用

在使用场景中大家都会遇到&#xff0c;下拉列表显示汉字&#xff0c;而存储使用的是对应的value值&#xff0c;从而转换就成了一个问题&#xff0c;接下来给大家带来一套的解决方案&#xff0c;方法可能不是特别高明&#xff0c;但是很实用&#xff0c;易读易维护&#xff0c;话…

【Unity】RPG2D龙城纷争(五)关卡编辑器之地图编辑

更新日期:2024年6月25日。 项目源码:本章发布 索引 简介关卡编辑器窗口类(LevelEditor)一、定义关卡编辑器窗口类二、两种编辑模式三、地块编辑模式1.关卡模板2.打开编辑窗口3.编辑器基本属性4.地块模板5.重新生成地图6.地图刷子7.刷地块源码链接简介 关卡编辑器将是我们配…

基本的 Spring Boot 配置步骤和常见的配置项【创建,配置,日志,数据库,安全,MVC】

基本的 Spring Boot 配置步骤和常见的配置项【创建&#xff0c;配置&#xff0c;日志&#xff0c;数据库&#xff0c;安全&#xff0c;MVC】 学习总结 1、掌握 JAVA入门到进阶知识(持续写作中……&#xff09; 2、学会Oracle数据库入门到入土用法(创作中……&#xff09; 3、…

EAK高压电阻器-引线高压电阻器-厚膜高压电阻器

描述 EAK高压电阻器是扁平高压电阻器&#xff0c;完全满足低感、稳定和精密无源元件的所有要求。 扁平高压电阻器最适合作为组装在 PCB 上的有线元件&#xff0c;但也可以用作 SMD 元件。 我们提供 HVR、HPR、HVI、HVD 和 HVS 系列的扁平高压电阻器&#xff0c;这些电阻器具…

AI+零信任 | 易安联亮相首届“矩阵杯”网络安全大赛

6月26日&#xff0c; 首届“矩阵杯”网络安全大赛 在青岛国际会议中心举行。大赛由360数字安全、华云安主办&#xff0c;赛宁网安、永信至诚、红客社区协办&#xff0c;致力于推动提升全民网络安全意识、发现顶尖安全人才、鼓励技术创新发展&#xff0c;推动安全行业共建共享…

信息系统项目管理师

1.1项目的定义及特点 项目的定义:为创造独特的产品、服务或成果而进行的临时性工作 项目的特征: 独特性: 差异化(没有完全一样的项目) 临时性: 时间临时(开始时间、结束时间) 团队临时(不同阶段可能有不同的人来参加) 渐进明细性: 成果性目标是逐步…

Cambrian-1:探索以视觉为中心的多模态LLM新纪元

一、摘要 论文&#xff1a;Cambrian-1: A Fully Open, Vision-Centric Exploration of Multimodal LLMs&#xff0c;https://arxiv.org/abs/2406.16860 主页&#xff1a;https://cambrian-mllm.github.io/ 代码&#xff1a;https://github.com/cambrian-mllm/cambrian 本文研发…

堆栈与堆内存 - C#

探索 C# 编程中内存管理的细微差别&#xff0c;区分值类型和引用类型&#xff0c;理解动态和静态内存分配&#xff0c;评估访问效率… 背景 以下是 C# 中堆栈和堆内存之间的主要区别列表。这适用于初学者和专业的 C# 开发人员。 C# 中栈和堆内存的区别 概括 现在&#xff0c…

主流电商平台API接口(天猫获得淘宝商品详情,获得淘宝app商品详情原数据 ,获得淘口令真实url API,按图搜索淘宝商品(拍立淘) API )

主流电商平台商品接口在电商企业中具有重要应用价值。通过商品接口&#xff0c;电商企业可以实现商品同步功能&#xff1a; 商品信息同步&#xff1a;通过接口可以实时同步主流电商平台上的商品信息&#xff0c;包括商品标题、价格、库存、销量等数据&#xff0c;确保企业在自…

ubuntu/debian中安装OpenCV并且配置OpenCV开发环境

编译OpenCV 本文想编译第三方的模块&#xff0c;尤其时aruco模块以及sfm(structure from motion)模块&#xff0c;所以需要同时编译contrib代码。 由于sfm模块依赖其他一些库&#xff0c;这些库如果不提前安装&#xff0c;最后sfm不会编译 需要安装下面一些&#xff0c;sfm文…

python中的__hash__魔法函数详解

在Python中&#xff0c;__hash__ 是一个特殊方法&#xff08;也称为魔法方法或双下划线方法&#xff09;&#xff0c;它用于定义对象的哈希值。哈希值是一个整数&#xff0c;通常用于在哈希表&#xff08;如字典和集合&#xff09;中快速查找对象。 当你试图将一个对象作为键添…

Spring Boot中的多模块项目构建

Spring Boot中的多模块项目构建 大家好&#xff0c;我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编&#xff0c;也是冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01; 随着应用程序的复杂性增加&#xff0c;将一个大型的应用程序拆分为多个模块或…

HarmonyOS4升级到Harmonyos Next(Api 11)学习捷径

HarmonyOS4升级到Harmonyos Next&#xff08;Api 11&#xff09;学习捷径&#xff0c;新技术学习路上少走弯路。HarmonyOS NEXT和HarmonyOS 4的基本语法都是一样的&#xff0c;但是还有一些区别。如果你学会HarmonyOS4&#xff0c;那么HarmonyOS Next也自然而然的会了。 Harmon…

RabbitMQ实践——搭建单人聊天服务

大纲 创建Core交换器用户登录发起聊天邀请接受邀请聊天实验过程总结代码工程 经过之前的若干节的学习&#xff0c;我们基本掌握了Rabbitmq各个组件和功能。本文我们将使用之前的知识搭建一个简单的单人聊天服务。 基本结构如下。为了避免Server有太多连线导致杂乱&#xff0c;下…

哈喽GPT-4o,对GPT-4o 数据分析Data Analysis的思考与看法

目录 上传一个Excel给Data Analysis。Prompt&#xff1a;请问这个数据集是做什么的Prompt&#xff1a;请问书籍的定价如何&#xff0c;请用合适的图表展示它的售价情况Prompt&#xff1a;请统计书名列中出现最多的名称&#xff0c;然后使用词云将其可视化。Prompt&#xff1a;请…

笔记 - shell脚本

前言 Shell脚本是一种用来执行命令行命令的脚本文件。它是由一系列Shell命令组成的程序&#xff0c;通常用于自动化任务、系统管理、数据处理等。Shell脚本可以运行在各种Unix和Linux系统上&#xff0c;也可以在Windows上的一些兼容环境&#xff08;如Cygwin、WSL&#xff09;中…

js闭包函数

闭包是指在一个函数内部定义的函数&#xff0c;并且该函数可以访问到外部函数的变量。闭包可以将外部函数的变量保持在内存中&#xff0c;并且不会被释放。 闭包具有以下特性&#xff1a; 1. 函数内部定义的函数可以访问外部函数的变量。 2. 外部函数的变量可以保持在内存中&am…