面向对象——继承、封装、多态

什么是面向对象?

面向对象(Object-Oriented Programming,简称OOP)是一种编程范式,它使用“对象”来设计应用程序和计算机程序。OOP的核心概念包括类(Class)、对象(Object)、封装(Encapsulation)、继承(Inheritance)、多态(Polymorphism)等。


继承(Encapsulation)

继承允许一个类(子类)从另一个类(父类)获取属性和方法。子类可以复用父类的代码,并添加新的属性和方法或重写父类的方法。

继承的好处
  • 代码重用:子类可以继承父类的属性和方法,避免重复代码,从而提高开发效率。
  • 代码扩展性:子类可以扩展或重写父类的方法,增加新的功能,而不需要修改现有代码。
  • 维护和更新方便:修改父类的代码可以影响所有子类,从而简化维护和更新。
  • 设计一致性:继承保证了设计的一致性,使得代码结构更加清晰,便于理解和使用。
  • 多态性的基础:继承是实现多态的基础,允许通过父类引用指向子类对象,实现动态绑定。

封装(Inheritance)

将属性和方法书写到类里面的操作即为封装。并为属性和方法设置访问权限,提高了代码的安全性和可维护性。

封装的好处
  • 数据隐藏和保护:封装将对象的内部状态(属性)隐藏起来,防止外部直接访问和修改,保护数据的完整性和安全性。
  • 控制访问和修改:通过公有方法(getter和setter)控制对属性的访问和修改,确保数据的合法性和一致性。
  • 提高代码的模块化和可维护性:将相关的属性和方法组织在一个类中,使代码更加模块化,便于理解、调试和维护。
  • 提高代码的重用性:通过封装,将通用功能封装在类中,可以在不同的场景中重用这些类,而无需重复编写相同的代码。
  • 隔离变化:类的内部实现细节对外部不可见,如果类的内部实现发生变化,外部代码不需要修改,提高了代码的稳定性和可扩展性。

多态(Polymorphism)

多态是允许一个接口或父类的引用指向不同的子类对象,并调用这些子类对象的方法。多态分为编译时多态(方法重载)和运行时多态(方法重写)。

多态的好处
  • 提高代码的灵活性和扩展性:多态允许通过统一的接口处理不同类型的对象,便于扩展和修改。
  • 提高代码的重用性:父类的引用可以指向不同的子类对象,实现代码重用,相同的代码可以处理不同类型的对象。
  • 提高代码的可维护性:隐藏具体实现细节,便于维护和修改,通过抽象父类或接口定义统一的接口,使得具体实现的细节被隐藏。
  • 支持设计模式和框架:多态是许多设计模式(如策略模式、工厂模式、命令模式等)和框架实现的基础,促进高度解耦和灵活的设计。
  • 简化代码和提高可读性:通过统一的接口和抽象层次,减少复杂性,使代码更易于理解和阅读,不同的对象类型可以通过相同的接口进行操作。

组合示例

# 封装
class Animal:def __init__(self, name):self.__name = name  # 私有属性def get_name(self):return self.__namedef speak(self):raise NotImplementedError("子类必须实现抽象方法")# 继承
class Dog(Animal):def speak(self):return "汪汪"class Cat(Animal):def speak(self):return "喵喵"# 多态
def animal_speak(animal):print(f"{animal.get_name()} 的叫声: {animal.speak()}")dog = Dog("狗")
cat = Cat("猫")animal_speak(dog)  # 输出: 狗 的叫声: 汪汪
animal_speak(cat)  # 输出: 猫 的叫声: 喵喵

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

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

相关文章

SQL注入基础入门

文章目录 前言SQL注入基本操作SQL注入类型分类数字型字符型搜索型xx型Json型数据类型提交的方式 SQL注入的位置分类报错注入报错注入实战案例 SQL注入语句分类insert注入update注入delete注入 编码Tips:Mysql版本区别information_schema数据库详解 其他注入手段宽字…

面试官:Java线程可以无限创建吗?

1. 面试连环call Java线程可以无限创建吗? Java线程和操作系统线程有什么关联? 操作系统为什么要区分内核态和用户态? ⏩要想解答这些问题,我们要先从操作系统线程开始说起,让我们开始吧🎉🎉🎉 2. 操作系统线程…

为什么要学习Go

本文旨在探讨为什么Go语言值得学习,以及它如何能够提升您的编程技能和职业发展。我们将深入分析Go语言的核心优势,包括其简洁的语法、强大的并发支持、卓越的性能表现,以及在云计算、微服务和系统编程等领域的广泛应用 GO logo的核心理念,即简单胜于复杂。使用现代…

Redis-Redis可视化工具Redis Insight下载及安装

下载 1、博主已经上传资源,点此下载 2、点此进入官方下载 2.1 点击Installing Redis Insight 2.2 点击Install on desktop 2.3 选择Install on desktop,点击Redis Insight is available for download for free from this web site从网站下载 2.4 下载…

大模型简介

文章目录 大模型简介什么是大模型GPT大语言模型发展大语言模型对话产品大模型怎么用 大模型简介 什么是大模型 大模型,全称「大语言模型」,英文「Large Language Model」,缩写「LLM」。是具有大量参数和复杂结构的机器学习模型。大模型通常…

Python 可视化 web 神器:streamlit、Gradio、dash、nicegui;低代码 Python Web 框架:PyWebIO

官网:https://streamlit.io/ github:https://github.com/streamlit/streamlit API 参考:https://docs.streamlit.io/library/api-reference 最全 Streamlit 教程:https://juejin.cn/column/7265946243196436520 Streamlit-中文文档…

MYSQL 四、mysql进阶 7(性能分析工具的使用)

一、数据库服务器的优化步骤 数据库调优流程图: 整个流程划分成了 观察(Show status) 和 行动(Action) 两个部分。字母 S 的部分代表观察(会使 用相应的分析工具),字母 A 代表的部分是行…

算法012:将x减到0的最小操作数

将x减到0的最小操作数. - 备战技术面试?力扣提供海量技术面试资源,帮助你高效提升编程技能,轻松拿下世界 IT 名企 Dream Offer。https://leetcode.cn/problems/minimum-operations-to-reduce-x-to-zero/ 这个题使用到的是滑动窗口。 乍一看&#xff0c…

U盘管理软件有哪些?3款好用的软件亲测有效!

在数字化办公与数据交换日益频繁的今天,U盘作为便携的存储设备,其重要性不言而喻。 然而,U盘的使用也带来了数据泄露、病毒感染等安全隐患。为了有效管理U盘,确保数据安全与合规性,市场上涌现出了众多U盘管理软件。 小…

大话C语言:第29篇 指针

1 指针概念 指针:地址的变量化形式,其存储的是内存中某个存储单元的地址。它是地址的数值表示。 指针变量:一种特殊的变量,它专门用于存放变量的地址(即指针)。 注意,指针和指针变量的区别&am…

【Linux】线程池|单例模式|STL、智能指针线程安全|读者写者问题

> 作者:დ旧言~ > 座右铭:松树千年终是朽,槿花一日自为荣。 > 目标:理解【Linux】线程池|单例模式|STL、智能指针线程安全|读者写者问题。 > 毒鸡汤:有些事情,总是不明白,所以我不会…

2024 年 07 月编程语言排行榜|Rust 即将进入前十

TIOBE 2024 年 07 月份的编程语言排行榜已经公布,官方的标题是:Rust 即将进入前十(Rust is preparing itself for the top 10)。 Python 继续保持第一,而 C 超越 C 升至第二: 在 TIOBE 7 月编程语言排行榜…

springboot项目怎么样排除自带tomcat容器使用宝蓝德bes web中间件?

前言: 由于Spring Boot 1.x和2.x不兼容,BES提供了对应的Spring Boot Starter版本。 bes‑lite‑spring‑boot‑1.x‑starter.jar,适用于Spring Boot 1.x的版本。 bes‑lite‑spring‑boot‑2.x‑starter…

深度解析:当下流行的人工智能大模型生成逻辑

在过去的几年里,人工智能领域经历了前所未有的革新,其中最引人注目的就是大规模预训练模型的崛起。这些模型,如GPT系列、BERT、T5、DALLE和CLIP等,凭借其强大的语言理解和生成能力,已经在自然语言处理(NLP&…

Dockerfile打包部署常用操作

文章目录 1、Dockerfile部署java程序(jar包)1.1、创建Dockerfile1.2、将Dockerfile和要上传的jar包放到一个目录下,构建镜像1.3、创建启动容器 2、Dockerfile部署vue2.1、创建dockerfile文件2.2、将打包的dist文件放到dockerfile同文件目录下…

《初级C++》(一)

初级C(一) 1: C参考⽂档2:C创建与实现创建C的第一套程序命名空间的理解空间命名的实现C输⼊&输出缺省参数 1: C参考⽂档 https://legacy.cplusplus.com/reference/ 《非官方》 https://zh.cppreference.com/w/cpp 《官方中文版》 https:/…

vue3 学习 之 vue3使用

为什么要学习vue3呢? vue2.0也是现在比较稳定的一个版本,社区还有周边都比较完善,如果不是非必要其实我们不需要着急直接升级到vue3.0; 那为什么还要学习,主要是还是为了了解一下vue3.0相较于2.0的优势和特性,方便之后…

Unity实现安卓App预览图片、Pdf文件和视频的一种解决方案

一、问题背景 最近在开发app项目,其中有个需求就是需要在app软件内显示图片、pdf和视频,一开始想的解决方案是分开实现,也就是用Image组件显示图片,找一个加载pdf的插件和播放视频的插件,转念一想觉得太麻烦了&#x…

浏览器控制台打印日志的方法汇总

目录 console.table用法 打印数组 打印对象 打印数组对象 打印数组对象里的指定字段 console.count用法 不传参打印 传参打印 console.warn用法 打印文本 打印对象 console.error用法 打印文本 打印对象 console.assert用法 打印文本 打印对象 consol…

AI视频创作一条龙!达摩院“寻光”平台炸场WAIC,突破可控编辑难题

卡奥斯智能交互引擎是卡奥斯基于海尔近40年工业生产经验积累和卡奥斯7年工业互联网平台建设的最佳实践,基于大语言模型和RAG技术,集合海量工业领域生态资源方优质产品和知识服务,旨在通过智能搜索、连续交互,实时生成个性化的内容…