【Java 基础】09 封装 继承 多态

我们都知道 Java 是以面向对象而著称,最著名的当然就是面向对象的三大特性啦,接下来就逐一举例说明一下。

1. 封装

封装指的是将类的内部细节隐藏起来,只对外提供必要的访问方式。

例如:

我们使用的计算器做一个乘法运算,666 * 1234 = ?

面对这种情况,我们只需要输入到计算器里面,就可以得到一个结果。

那么,计算器是怎么计算出来的结果呢?它也没把计算方法告诉我们啊,藏起来了,这就是一种封装。

如下图这样,把 name 的值藏起来,提供了一个 getName 的方法以供获取其值

在这里插入图片描述

在 Java 中通常将类的成员变量声明为私有的(使用 private 关键字修饰),防止其他人直接访问,只能通过它提供的方法进行访问,隐藏一些自己的事,然后给出一个结果。

示例代码:

class Student {private String name;public String getName() {return name;}public void setName(String newName) {name = newName;}
}

在上述代码中,name 属性被声明为私有,将其对外隐藏起来,只能通过公有的 getter 和 setter 方法来访问和修改。

这样做有什么好处呢?

  • 安全性: 防止外部直接访问和修改类的内部数据,只能通过定义的方法进行操作。
  • 灵活性: 可以在方法中加入控制逻辑,实现更精确的操作。
  • 可维护性: 如果需要修改类的实现细节,只需要修改类的内部代码,而不会影响外部使用类的代码。

2. 继承

继承是为了代码重用的一种方式,一个类可以继承另一个类的属性和方法。

例如:

我们想定义两个类:一个是动物它可以 吃东西,另一个是狗狗它可以 吠叫

那么,狗狗是不是动物的一种呢?可以吃东西么?答案当然是可以的,就说明狗狗将会拥有 吃东西和吠叫。

面对这种情况,我们就会使用到了继承的特性,定义一个动物,然后去定义一个狗狗让其继承自动物,把吃东西的技能继承下来。

在这里插入图片描述

示例代码:

class Animal {void eat() {System.out.println("Animal is eating...");}
}class Dog extends Animal {void bark() {System.out.println("Dog is barking...");}
}

在上述代码中,Dog 类使用 extends 关键字继承了 Animal 类的 eat 方法。

3. 多态

多态是允许不同的类实现相同的方法,提高了代码的灵活性和可扩展性。

例如:

我们想画画找到了两个工具,一个是画圆的圆规,另一个是画方块的格尺

这两个工具,都拥有着一个技能是 画画

这两种工具,虽然都拥有着一样的技能名称画画,但是画出来的东西确实不一样的,这就是多态。
在这里插入图片描述

示例代码:

interface Shape {void draw();
}class Circle implements Shape {public void draw() {System.out.println("Drawing a circle");}
}class Square implements Shape {public void draw() {System.out.println("Drawing a square");}
}

上述代码中,CircleSquare 类都实现了 Shape 接口的 draw 方法,实现了多态。

总结:这三大特性,在日后编程中尤其重要,要好好去理解。

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

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

相关文章

[原创]Delphi的SizeOf(), Length(), 动态数组, 静态数组的关系.

[简介] 常用网名: 猪头三 出生日期: 1981.XX.XXQQ: 643439947 个人网站: 80x86汇编小站 https://www.x86asm.org 编程生涯: 2001年~至今[共22年] 职业生涯: 20年 开发语言: C/C、80x86ASM、PHP、Perl、Objective-C、Object Pascal、C#、Python 开发工具: Visual Studio、Delphi…

SQL Sever 复习笔记【一】

SQL Sever 基础知识 一、查询数据第1节 基本 SQL Server 语句SELECT第2节 SELECT语句示例2.1 SELECT - 检索表示例的某些列2.2 SELECT - 检索表的所有列2.3 SELECT - 对结果集进行筛选2.4 SELECT - 对结果集进行排序2.5 SELECT - 对结果集进行分组2.5 SELECT - 对结果集进行筛选…

【前端】多线程 worker

VUE3 引用 npm install worker-loader 在vue.config.js文件的defineConfig里加上配置参数 chainWebpack: config > {config.module.rule(worker-loader).test(/\.worker\.js$/).use({loader: worker-loader,options: {inline: true}}).loader(worker-loader).end()}先在…

C语言错误处理之 “<errno.h>与<error.h>”

目录 前言 错误号处理方式 errno.h头文件 error.h头文件 参数解释: 关于的”__attribute__“解释: 关于“属性”的解释: 实例一: 实例二: error.h与errno.h的区别 补充内容: 前言 在开始学习…

后仿真 ERROR

后仿真 error ERROR (SFE-23): "input.scs" 252: The instance _57_D32_noxref is referencing an undefined model or subcircuit, parasitic_nwd. Either include the file containing the definition of parasitic_nwd, or define parasitic_nwd before running t…

VUE2+THREE.JS点击事件

THREE.JS点击事件 1.增加监听点击事件2.点击事件实现3.记得关闭页面时 销毁此监听事件 1.增加监听点击事件 renderer.domElement.addEventListener("click", this.onClick, false); 注:初始化render时监听 2.点击事件实现 onClick(event) {const raycaster new …

LV.12 D21 PWM实验 学习笔记

一、PWD简介 1.1 蜂鸣器工作原理 有源蜂鸣器 有源蜂鸣器只要接上额定电源就可以发出声音 无源蜂鸣器 无源蜂鸣器利用电磁感应原理,为音圈接入交变电流后形成的电磁铁与永磁铁相吸或相斥而推动振膜发声 1.2 使用GPIO控制 while(1) { GPX2.DATGPX2.D…

Python中用于机器学习的Lazy Predict库

Python是一种多功能语言,你可以用它来做任何事情。Python的一个伟大之处在于,有这么多的库使它变得更加强大。Lazy Predict就是其中一个库。它是机器学习和数据科学的一个很好的工具。在本文中,我们将了解它是什么,它做什么&#…

matlab 无迹卡尔曼滤波

1、内容简介 略 26-可以交流、咨询、答疑 2、内容说明 无迹卡尔曼滤波 无迹卡尔曼滤波 无迹卡尔曼滤波 3、仿真分析 %该文件用于编写无迹卡尔曼滤波算法及其测试 %注解:主要子程序包括:轨迹发生器、系统方程 % 测量方程、UKF滤波器 %----…

LeetCode Hot100 31.下一个排列

题目: 整数数组的一个 排列 就是将其所有成员以序列或线性顺序排列。 例如,arr [1,2,3] ,以下这些都可以视作 arr 的排列:[1,2,3]、[1,3,2]、[3,1,2]、[2,3,1] 。 整数数组的 下一个排列 是指其整数的下一个字典序更大的排列…

刷题笔记12.01 贪心策略

P1090 [NOIP2004 提高组] 合并果子 / [USACO06NOV] Fence Repair G - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 说最大不超过.不用高精度,好说 #include <bits/stdc.h> using namespace std; int n,n2,a; long long a1[10004],a2[10004],sum; int main() {ios::sync_…

【话题】程序员养生指南(AI生成)

目录 程序猿可能出现的职业病有哪些&#xff1f; 如何预防和对付这些职业病&#xff1f; 一、颈椎病的预防 二、神经衰弱的调适 三、肩周炎的防护 四、视力下降的保护 五、饮食与运动的重要性 六、消化系统职业病的预防 程序员养生心得&#xff1a;呵护健康&#xff0c…

百元挂耳式蓝牙耳机推荐,几款性价比高的开放式蓝牙耳机

在百元价位段&#xff0c;挂耳式蓝牙耳机是备受消费者追捧&#xff0c;提供了出色的音质、便携性和无拘束的使用体验&#xff0c;无论您是追求音乐品质&#xff0c;还是需要在办公或运动中保持通讯畅通&#xff0c;基本上都是离不开耳机的身影&#xff0c;今天小编为大家推荐几…

Burp Suite序列之目录扫描

如果你是一名渗透测试爱好者或者专业人士&#xff0c;你一定知道目录扫描是渗透测试中非常重要的一步。通过目录扫描&#xff0c;我们可以发现网站的敏感信息&#xff0c;隐藏的功能&#xff0c;甚至是后台入口。目录扫描可以帮助我们更好地了解目标网站的结构和漏洞。 但是&a…

卡码网15 .链表的基本操作III

链表的基础操作III 时间限制&#xff1a;1.000S 空间限制&#xff1a;128MB 题目描述 请编写一个程序&#xff0c;实现以下链表操作&#xff1a;构建一个单向链表&#xff0c;链表中包含一组整数数据。 1. 实现在链表的第 n 个位置插入一个元素&#xff0c;输出整个链表的…

软著项目推荐 深度学习实现语义分割算法系统 - 机器视觉

文章目录 1 前言2 概念介绍2.1 什么是图像语义分割 3 条件随机场的深度学习模型3\. 1 多尺度特征融合 4 语义分割开发过程4.1 建立4.2 下载CamVid数据集4.3 加载CamVid图像4.4 加载CamVid像素标签图像 5 PyTorch 实现语义分割5.1 数据集准备5.2 训练基准模型5.3 损失函数5.4 归…

计算机软件的分类

以功能进行分类&#xff0c;计算机软件通常可以分为系统软件和应用软件两大类。 系统软件&#xff1a;系统软件是计算机运行和管理的基本软件&#xff0c;包括操作系统、驱动程序、系统工具和服务程序等。操作系统是系统软件的核心&#xff0c;负责管理计算机的硬件资源、提供用…

python之pyqt专栏10-键盘事件

需求 通过按键盘的上下左右&#xff0c;移动button的位置。 UI界面设计 代码 # 导入sys模块 import sysfrom PyQt6.QtCore import Qt # PyQt6.QtWidgets模块中导入QApplication, QWidget from PyQt6.QtWidgets import QApplication, QWidget# untitled模块中导入Ui_Form类 f…

跨越鸿沟-颠覆性产品营销指南笔记

跨越鸿沟-颠覆性产品营销指南笔记 一、发现鸿沟 一、技术采用生命周期 技术采用生命周期 如果采用一个新产品&#xff0c;我们就得改变一贯的行为模式&#xff0c;或者改变我们依赖的其他产品或服务&#xff0c;那么&#xff0c;我们对技术采用的态度就变得很重要&#xff0c…

shell编程系列(8)-使用sed处理文本

文章目录 引言sed用法详解在文本中定位打印文本替换文本删除文本新增文本 结语 引言 在日常工作学习中我们都会遇到要编辑文本的场景&#xff0c;例如我们要用vim或者nano等命令去编辑代码&#xff0c;处理文本文件等&#xff0c;这些命令的特点都是需要我们进行交互式的实时处…