百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术资源 > 正文

程序员Python和Java类的封装、继承和多态

off999 2024-10-25 13:44 32 浏览 0 评论


@Python大星

一、Python 类的封装、继承和多态

封装

继承

Python 支持多父类的继承机制,所以需要注意圆括号中基类的顺序,若是基类中有相同的方法名,并且在子类使用时未指定,Python 会从左至右搜索基类中是否包含该方法。一旦查找到则直接调用,后面不再继续查找。解决了多重继承的冲突问题。



多态

狗、猫、猪都继承了动物类,并各自重写了 kind 方法。show_kind () 函数接收一个 animal 参数,并调用它的 kind 方法。可以看出,无论我们给 animal 传递的是狗、猫还是猪,都能正确的调用相应的方法,打印对应的信息。这就是多态。

二、Java 类的封装、继承和多态

封装

隐藏对象的属性和实现细节,仅对外提供公共访问方式,将变化隔离,便于使用,提高复用性和安全性。

1、封装的优点

① 良好的封装能够减少耦合。

② 类内部的结构可以自由修改。

③ 可以对成员变量进行更精确的控制。

④ 隐藏信息,实现细节。

2、如何理解 Java 的封装?

将类的某些信息隐藏在类内部,不允许外部程序直接访问,而是通过该类提供的方法来实现对隐藏信息的操作和访问,常见的实现方式就是:getter、setter。

假设我们的类 Person 是这样:

如果在外部代码使用它,则需要:

但是,现实中如果很多外部代码都使用了 Person 这个类;某一天,如果这个类的 age 需要换成 String 类型,那么,外部使用它的任何地方都需要需改 xxx.age="xxx"。

如果我们使用 getter、setter

这样外部其他地方就不需要改了。

我们在 getter、setter 中还可以对成员变量进行精准的控制

继承

继承就是子类继承父类的特征和行为,使得子类对象(实例)具有父类的实例域和方法,或子类从父类继承方法,使得子类具有父类相同的行为。如下图

如果不用继承,代码可能这样

我们可以发现里面有很多重复性的代码。

如果我们使用继承

1、继承的注意事项

① 子类只能继承父类非私有的成员(成员方法和成员变量)

② 子类不能继承父类的构造方法,但是可以通过 super 关键字去访问父类构造方法

this 和 super 的区别?

this 代表本类对象的引用,super 代表父类存储空间标识。

【你一定遇到过Java 面试继承相关题目】

第一关:

输出结果:

第二关:

输出结果:

Java 是单继承的,那为什么不能允许多继承?

假设有一个老虎类,既继承父类猫科,又继承父类动物科,如果两个父类都有一个“吃”的方法,那么当我们调用 “叫” 这个方法时,它就不知道是猫科叫还是动物叫了,这就是多重继承的冲突。

多态

多态是同一个行为具有多个不同表现形式或形态的能力。多态就是同一个接口,使用不同的实例而执行不同操作。

1、多态的优点

① 消除类型之间的耦合关系

② 可替换性

③ 可扩充性

④ 接口性

⑤ 灵活性

⑥ 简化性

2、多态存在的三个必要条件

  • 继承
  • 重写
  • 【初级面试必问:重写和重载的区别?】

    ① 重写

    重写是子类对父类的允许访问的方法的实现过程进行重新编写,返回值和形参都不能改变。即外壳不变,核心重写!

    重写的好处在于子类可以根据需要,定义特定于自己的行为。 也就是说子类能够根据需要实现父类的方法。

    重写方法不能抛出新的检查异常或者比被重写方法申明更加宽泛的异常。

    ② 重载

    是指一个类中方法名称相同,但参数的个数,类型或顺序不同与返回值无关!


    注意:比如说你方法名fun相同,参数个数,类型顺序相同,但是返回值一个是 void,一个是 String,这不构成重载。试想一下,如果我们调用这个方法,fun(a,b),机器如何判断我们是调用哪一个呢?结论:不要让机器做不确定的事情。

  • 父类引用指向子类对象
  • ① 向上转型:将一个子类的引用赋给一个超类变量,编译器是允许的,不用进行强制类型转换。

    格式: 超类 超类变量 = new 子类 ();

    ② 向下转型:但是将一个超类的引用赋给 一个子类变量,必须进行强制类型转换,这样才能够通过运行时的检查

    格式: 子类 子类对象变量名 =(子类) 父类对象引用


    结论:当超类类变量引用子类对象

    访问成员变量时:访问的是父类的成员变量

    访问成员方法时:先访问的是超类的此方法,如果此方法被子类覆盖,则调用子类的方法。并且不能访问子类特有的方法

    输出结果:

    >>>Python 和 Java 基础对比 09 —— 类的介绍

    相关推荐

    Python Flask 容器化应用链路可观测

    简介Flask是一个基于Python的轻量级Web应用框架,因其简洁灵活而被称为“微框架”。它提供了Web开发所需的核心功能,如请求处理、路由管理等,但不会强制开发者使用特定的工具或库。...

    Python GUI应用开发快速入门(python开发软件教程)

    一、GUI开发基础1.主流GUI框架对比表1PythonGUI框架比较框架特点适用场景学习曲线Tkinter内置库,简单小型应用,快速原型平缓PyQt功能强大,商用许可专业级桌面应用陡峭PySi...

    【MCP实战】Python构建MCP应用全攻略:从入门到实战!

    实战揭秘:Python Toga 打造跨平台 GUI 应用的神奇之旅

    在Python的世界里,GUI(图形用户界面)开发工具众多,但要找到一款真正跨平台、易于使用且功能强大的工具并不容易。今天,我们就来深入探讨一下Toga——一款Python原生、操作系统原...

    python应用目录规划(python的目录)

    Python大型应用目录结构规划(企业级最佳实践)核心原则模块化:按业务功能拆分,高内聚低耦合可扩展性:支持插件机制和动态加载环境隔离:清晰区分开发/测试/生产环境自动化:内置标准化的构建测试部署流...

    Python图形化应用开发框架:PyQt开发简介

    PyQt概述定义:PyQt是Python绑定Qt框架的工具集,用于开发跨平台GUI应用程序原理:通过Qt的C++库提供底层功能,PyQt使用SIP工具生成Python绑定特点:支持Windows/ma...

    [python] 基于PyOD库实现数据异常检测

    PyOD是一个全面且易于使用的Python库,专门用于检测多变量数据中的异常点或离群点。异常点是指那些与大多数数据点显著不同的数据,它们可能表示错误、噪声或潜在的有趣现象。无论是处理小规模项目还是大型...

    Python、Selenium 和 Allure 进行 UI 自动化测试的简单示例脚本

    环境准备确保你已经安装了以下库:SeleniumAllurepytest你可以使用以下命令安装所需库:pipinstallseleniumallure-pytestpytest示例代码下面的代...

    LabVIEW 与 Python 融合:打造强大测试系统的利器

    在现代测试系统开发领域,LabVIEW和Python各自凭借独特优势占据重要地位。LabVIEW以图形化编程、仪器控制和实时系统开发能力见长;Python则凭借丰富的库资源、简洁语法和强大数...

    软件测试进阶之自动化测试——python+appium实例

    扼要:1、了解python+appium进行APP的自动化测试实例;2、能根据实例进行实训操作;本课程主要讲述用python+appium对APP进行UI自动化测试的例子。appium支持Androi...

    Python openpyxl:读写样式Excel一条龙,测试报表必备!

    无论你是测试工程师、数据分析师,还是想批量导出Excel的自动化工作者,只需一个库openpyxl,即可高效搞定Excel的各种需求!为什么选择openpyxl?支持.xlsx格式...

    Python + Pytest 测试框架——数据驱动

    引言前面已经和大家介绍过Unittest测试框架的数据驱动框架DDT,以及其实现原理。今天和大家分享的是Pytest测试框架的数据驱动,Pytest测试框架的数据驱动是由pytest自...

    这款开源测试神器,圆了我玩游戏不用动手的梦想

    作者:HelloGitHub-Anthony一天我在公司用手机看游戏直播,同事问我在玩什么游戏?我和他说在看直播,他恍然大悟:原来如此,我还纳闷你玩游戏,咋不用动手呢。。。。一语惊醒梦中人:玩游戏不用...

    Python单元测试框架对比(pycharm 单元测试)

    一、核心框架对比特性unittest(标准库)pytest(主流第三方)nose2(unittest扩展)doctest(文档测试)安装Python标准库pipinstallpytestp...

    利用机器学习,进行人体33个2D姿态检测与评估

    前几期的文章,我们分享了人脸468点检测与人手28点检测的代码实现过程,本期我们进行人体姿态的检测与评估通过视频进行人体姿势估计在各种应用中起着至关重要的作用,例如量化体育锻炼,手语识别和全身手势控制...

    取消回复欢迎 发表评论: