面向对象三大特性之一:继承

【Java笔记】第8章:面向对象的三大特性(封装、继承、多态) 各位小伙伴大家好!上期小编给大家讲解了Java中的面向对象,接下来讲讲Java中面向对象的三大特性!Java中面向对象的三大特性是封装(Encapsulation)、继承(Inheritance)和多态(Polymorphism)。这些特性是Java编程语言中实现面向对象编程(OOP)的核心概念。封装(Encapsulation)封装是指将数据(属性)和操作数据的方法(行为)封装在一起,形成一个不可分割的整体。在Java中,封装通过访问修饰符(如publicprivateprotected和。 阅读详情

1、继承的简单语法

继承指的是类与类之间的关系,继承的功能之一就是用来解决代码重用问题

继承是一种创建新类的方式,在python中,新建的类可以继承一个或多个父类,父类又可以成为基类或超类,新建的类称为派生类或子类

class People:
    pass


class Male(People):
    pass


print(Male.__bases__)

# (<class '__main__.People'>,)

__base__只查看从左到右继承的第一个子类,__bases__则是查看所有继承的父类,python支持多继承,用逗号分隔开多个继承的类

2、属性查找

2.1 派生

通过继承的方式创建一个新的类,会继承父类的所有属性,查找属性先从实例中找,然后去类中找,然后去父类中找。
子类也可以添加自己新的属性,或者在子类中重新定义父类中的属性,在调用时以子类为准,这就是派生。

2.2 继承的查找原理

为了实现继承,python会在MRO列表上从左到右开始查找,直到找到第一个匹配这个属性的类为止。

class People:
    pass


class Male(People):
    pass


print(Male.mro())

[<class '__main__.Male'>, <class '__main__.People'>, <class 'object'>]

Python中子类可以同时继承多个父类,如果继承了多个父类,那么属性的查找方式有两种,分别是:深度优先和广度优先
python3里统一都是新式类,按照广度优先的方式查找

2.2.1新式类和经典类

python2中才分经典类和新式类,没有继承object类的类以及该类的子类都是经典类,反之为新式类,python3中默认继承object类,都是新式类。

class People:
    pass

print(People.__bases__)
(<class 'object'>,)

2.2.2 广度优先

最后再找最高层类

class A:
    def test(self):
        print('from A')


class B(A):
    def test(self):
        print('from B')


class C(A):
    def test(self):
        print('from C')


class D(B):
    def test(self):
        print('from D')


class E(C):
    def test(self):
        print('from E')


class F(D, E):
    def test(self):
        print('from F')


f1 = F()
print(F.mro())
# [<class '__main__.F'>, <class '__main__.D'>,
# <class '__main__.B'>, <class '__main__.E'>,
# <class '__main__.C'>, <class '__main__.A'>,
# <class 'object'>]
class A:
    def test(self):
        print('from A')


class B(A):
    def test(self):
        print('from B')


class C(A):
    def test(self):
        print('from C')


class H(A):
    pass


class D(B):
    def test(self):
        print('from D')


class E(C):
    def test(self):
        print('from E')


class F(D):
    def test(self):
        print('from F')


class G(E):
    pass


class I(F, H, G):
    pass
print(I.mro())


[<class '__main__.I'>, <class '__main__.F'>, <class '__main__.D'>, <class '__main__.B'>, <class '__main__.H'>, <class '__main__.G'>, <class '__main__.E'>, <class '__main__.C'>, <class '__main__.A'>, <class 'object'>]

3、子类调用父类的方法

在子类派生出的新方法中,往往需要重用父类的方法
有两种方式:
1、父类名.函数名(参数),不依赖继承,就是普通的父类函数调用。

class People:
    def __init__(self, name, age, sex):
        self.name = name
        self.age = age
        self.sex = sex

    def run(self):
        pass


class Student(People):
    def __init__(self, name, age, sex, grade):
    #     self.name = name
    #     self.age = age
    #     self.sex = sex
        People.__init__(self, name, age, sex)  # 父类名+函数名
        self.grade = grade

    def learn(self):
        pass


s1 = Student('xiaohong', 18, 'male', '3')

print(s1.grade)

2、super()方法

class People:
    def __init__(self, name, age, sex):
        self.name = name
        self.age = age
        self.sex = sex

    def run(self):
        pass


class Student(People):
    def __init__(self, name, age, sex, grade):
    #     self.name = name
    #     self.age = age
    #     self.sex = sex
    #     People.__init__(self, name, age, sex)  # 父类名+函数名
        super().__init__(name, age, sex)   # 没有self参数
        self.grade = grade

    def learn(self):
        pass


s1 = Student('xiaohong', 18, 'male', '3')

print(s1.grade)

super是依赖继承的,即使没有继承关系,也会按照mro顺序表查找:

class A:
    def test(self):
        super().f1()


class B:
    def f1(self):
        print('from B')


class C(A,B):
    pass


c = C()
c.test()
print(C.mro())

结果
from B
[<class '__main__.C'>, <class '__main__.A'>, <class '__main__.B'>, <class 'object'>]

4、组合重用

组合指的是,在一个类中以另外一个类的对象作为数据属性,称为类的组合。
组合就是在对象中添加一个数据属性,指向另外一个类的对象。
意思就是把另外一个类的对象当作一项属性添加到属性中。
继承是一种’是’的关系,老师和学生是人,组合是一种“有”的关系,老师有课程,学生有老师。
当类之间有显著不同,并且较小的类是较大的类所需要的组件时,用组合比较好

class People:
    def __init__(self, name, age, sex):
        self.name = name
        self.age = age
        self.sex = sex


class Teacher(People):
    def __init__(self, name, age, sex):
        People.__init__(self, name, age, sex)  # 继承重用


class Student(People):
    def __init__(self, name, age, sex):
        People.__init__(self, name, age, sex)


class Course:
    def __init__(self, name, price):
        self.name = name
        self.price = price


student = Student('小明', 18, 'male')
teacher = Teacher('老李', 36, 'male')

# 为学生增加课程
python = Course('python', '3000')

student.course = python  # 组合重用

print(student.course)
# <__main__.Course object at 0x000002A1F34C5160>

print(student.course.name)
# python

# 为老师增加学生
teacher.student = student
print(teacher.student)
# <__main__.Student object at 0x000001DC13CE50F0>
print(teacher.student.name)
# 小明
python面向对象三大特性:封装,继承,多态 面向编程三大特性:封装(隐藏),继承,多态。 一. 封装 通过私有属性,私有方法的方式实现封装。 二. 继承 python支持多重继承,一个之类可以继承多个父类。 class 子类类名(父类1,父类2,…): 类体 父类名.__init__(self,参数列表) 1.成员继承:子类继承了父类除构造方法之外的所有成员。 2.方法重写:子类可以重新定义父类中的方法,这样就会覆盖父类中的方法,也称为重写。 通过类的方法**dir()**查看对象属性 重写__str__方法: 用于返回一个对于“ 阅读详情

相关推荐

C++学习——面向对象三大特性:封装、继承、多态

今天来更新面向更新的三大特性,分别是封装、继承、多态,是C++面试中常考也是非常重要的面试题之一,如果最近有春招的宝可以关注我噢,我会定时分享C++相关常考的知识与面试题哒!

mingyuexin235的博客 1934

【C++】类和对象三大特性--继承

继承是面向对象三大特性之一继承(inheritance)机制是面向对象程序设计使代码可以复用的最重要的手段,它允许程序员在保持原有类特性的基础上进行扩展,增加功能,这样产生新的类,称派生类。继承呈现了面向对象程序设计的层次结构,体现了由简单到复杂的认知过程。以前我们接触的复用都是函数复用,继承是类设计层次的复用有些类与类之间存在特殊的关系,例如下图中:我们发现,定义这些类时,下级别的成员除了拥有上一级的共性,还有自己的特性。这个时候我们就可以考虑利用继承的技术,减少重复代码。

记录学习点滴 2828

面向对象三大特性:封装-继承-多态

继承是Java提供一种语法,这种语法允许子类得到父类的属性和方法。继承能在保证程序功能不变的情况下,大大简化代码量,因此继承能帮我们更好的去设计类。在Java中使用extends关键字实现继承。被继承的类叫做父类,或超类,或基类。

FENG的学习笔记 1025

面向对象的三大特征之一:继承

1、什么是继承?继承的好处是啥? Java中提供一个关键字extends,用这个关键字,我们可以让一个类和另一个类建立起父子关心。 使用继承的好处:可以提高代码的复用性。 2、继承的格式: 子类 extends 父类 public class Student extends People {} Student称为子类(派生类),People称为父类(基类 或超类)。 3、继承后子类的特点? 子类继承父类,子类可以得到父类的属性和方法,子类可以使用。 Java中子类更强大 作用:当子类继承

yccccccjava的博客 236

centos7安装db2 version11.1

centos7安装db2 version11.1

AKA石头 1065

LobeHub开源AI应用平台:从部署到定制的全栈实践指南

在现代AI应用开发领域,大语言模型(LLM)的集成与部署是核心技术挑战之一。其原理在于通过API或本地化部署,将预训练模型的强大能力封装为可调用的服务。这项技术的核心价值在于极大地降低了AI应用的开发门槛,使开发者能够快速构建智能对话、内容生成等场景的应用。随着模型即服务(MaaS)模式的普及,一个关键痛点是如何高效地管理多模型、设计友好的用户界面并实现功能扩展。这正是开源项目LobeHub所聚焦的领域,它通过提供可插拔的架构和配置驱动的低代码理念,解决了AI能力落地的“最后一公里”问题。本文将结合Dock

weixin_27210125的博客 756

面向对象程序设计(继承)

public class fu { protected int age=40; public void show() { System.out.println("show方法被调用"); } } public class zi extends fu { private int age=20; public void study() { System.out.println("好好学习"); } .

qq_58259539的博客 1116

智能车视觉算法实战:十字路口与弯道拐点的精准识别

本文深入探讨了智能车视觉导航中十字路口与弯道拐点的精准识别算法。通过实战经验,详细解析了如何利用纵向巡线法生成边界数组,并从中高效提取“上拐点”与“下拐点”的关键特征。文章重点分享了提升算法鲁棒性的核心技巧,包括图像预处理、ROI设置、状态机应用及多特征融合,旨在帮助开发者实现智能车在复杂路况下从“看见”到“看懂”的稳定决策。

weixin_29061465的博客 633

面向对象三大特性之——继承

面向对象三大特性之——继承 一、引言 此篇文章来自一个初学Java不久的学生,内容的用词、深度、广度甚至部分理解不够到位,再加上Markdown语法的不熟练,所以排版不够美观。但还是希望有疑问的读者能够读完全文,大家遇到问题可以一起交流。谢谢! 二、作者初识继承 最开始接触继承是在Java知识体系里面的。我最开始的理解,继承是Java语法里面的一个特性。其实这是错误的,Java属于面向对象编程语...

持续Java学习中 941

YOLOv8改进 - 注意力篇 - 引入CAA注意力机制

YOLOv8改进 - 注意力篇 - 引入CAA注意力机制

浪子L的博客 5223

ADP在线自适应动态规划之持续激励条件

在线自适应动态规划之持续激励条件 在在线自适应动态规划算法中,需要通过满足持续激励条件(Persistent Excitation Condition)保证critic网络权值的收敛性,一般的做法都是在算法初期在输入端引入探测噪声(Probing Noises)来保证数据的丰富性,但是由于在输入端引入噪声会给系统带来一些不好的影响,甚至可能破坏系统的稳定性。因此,出现了一些其他的方法来避免引入探测噪声,受阅读所限,我目前了解两种: Concurrent Learning(CL) Experience Re

qq_43435956的博客 6162

继承是面向对象三大特性之一

继承是面向对象三大特性之一 有些类与类之间存在特殊的关系,例如下图中: 我们发现,定义这些类时,下级别的成员除了拥有上一级的共性,还有自己的特性。 这时我们就可以考虑利用继承的技术,减少重复代码。 代码示例: #include <iostream> using namespace std; //继承实现页面 //公共页面类 class BasePage { public: void header() {

个人站点:https://www.heimajinpai.cn/ 200

ADS中HB仿真自动优化报错问题解决心得

在ADS HB仿真中自动优化出现报错被强制暂停,解决方法如下

yyyyyyyyyyjy的博客 6541

面向对象三大特性:封装、继承、多态

封装是基础,保障数据安全与模块独立;继承实现代码复用与层次化设计;多态通过动态绑定提升代码灵活性。三者协同作用,使得Java程序既高效又易于扩展。例如,一个游戏角色系统通过封装保护属性、继承复用代码、多态实现多样攻击行为,充分体现了三大特性的价值。版权声明:本博客内容为原创,转载请保留原文链接及作者信息。参考文章深入理解Java三大特性:封装、继承和多态面向对象三大特性:封装、继承、多态(最全面最详细的解释)

ning的博客 2004

独立游戏开发者的新武器:实测腾讯混元3D自动绑骨,搭配Mixamo让角色动画制作效率翻倍

本文实测腾讯混元3D自动绑骨功能与Mixamo动画库的协同使用,显著提升独立游戏开发者的角色动画制作效率。通过解决卡通角色绑骨偏差、优化骨骼权重及动画状态机配置,使原本两周的流程缩短至三天,并分享Unity中的性能优化与版权合规要点。

weixin_42662605的博客 497

SAP Group Reporting入门指南(1)--开篇及系统环境搭建

文章介绍了SAP GR的发展历程、与BPC的对比优势,数据收集的多种方式(实时同步、外部导入等)以及合并整体流程,并推出《SAP Group Reporting入门指南》专栏。

bflyfish的博客 283

Java 面向对象基础篇【三大特性:封装、继承、多态】

面向对象三大特征是面向对象编程的核心,它们使得代码更加模块化、可重用性和可维护性更强 ···

低调,谦虚,自律,反思,成长! 1824

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

面向对象三大特性:封装、继承、多态(最全面最详细的解释)

面向对象三大特性:封装、继承、多态 封装 概念: 将一些属性和相关方法封装在一个对象中,对外隐藏内部具体实现细节。 内部实现,外界不需要关心,外界只需要根据”内部提供的接口“去使用就可以。 好处: 使用起来更加方便:因为已经把很多相关的功能,封装成一个整体,类似于像外界提供一个工具箱,针对于不同的场景,使用不同的工具箱就可以; 保证数据的安全:针对于安全级别高的数据,可以设置成”私有“,可以控制数据为只读(外界无法修改),也可以拦截数据的写操作(进行数据校验和过滤); 利于代码维护:如果后期,功能代码需要

frighting_ing的博客 2万+

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

面向对象的三大特性:封装、继承、多态

面向对象的三大特性:封装、继承、多态 一、封装 1. 什么是封装 封装(Encapsulation)是面向对象方法的重要原则,就是把对象的属性和操作(或服务)结合为一个独立的整体,并尽可能隐藏对象的内部实现细节。 将类的某些信息隐藏在类的内部,不允许外部程序进行直接的访问调用。 通过该类提供的方法来实现对隐藏信息的操作和访问。 隐藏对象的信息。 留出访问的对外接口。 举个比较通俗的例子,比如我们的USB接口。如果我们需要外设且只需要将设备接入USB接口中,而内部是如何工作的,对于使用者来说并不重要。而U

你还有好多未完成的梦,你有什么理由停下? 415

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

Java面向对象程序三大特性:封装、继承、多态

通过合理地运用这三大特性,开发者能够将复杂的问题分解为更小的、易于管理的单位,大大提升了软件开发的效率和质量。封装是面向对象程序设计的基础,指的是将对象的状态和行为封装在一起,并对外提供访问接口。在该示例中,Manager类继承自Employee类,拥有Employee类的所有属性和方法,并能够重写work()方法来实现自己的行为。简化接口:通过封装,用户只需关注对象提供的接口,而不必关心其具体实现,降低了程序的复杂性。3.多态性:通过继承支持多态特性,使得同一接口可以有不同的实现,增强了系统的灵活性。

XHgga_的博客 1197

【C++】面向对象的三大特性:封装、继承、多态

本篇文章简单梳理了下C++面向对象的三种特性,即封装、继承、多态。

阿琪 1653

面向对象编程有三大特性:封装、继承、多态

不能比这个家伙写的再明确了 转载出处:http://blog.youkuaiyun.com/chenssy/article/details/12786385 面向对象编程有三大特性:封装、继承、多态。        封装隐藏了类的内部实现机制,可以在不影响使用的情况下改变类的内部结构,同时也保护了数据。对外界而已它的内部细节是隐藏的,暴露给外界的只是它的访问方法。        继承是为了重用父类代码

hexi_sijin的专栏 2262
上一篇: python面向对象基础
下一篇: 在python中实现抽象类
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值