面向对象概论之继承简述,组合简述,菱形继承简述

一.继承

1.简述:

用来表述的是类与类之间的关系,比如A继承了B,那么A会有B已有的方法和属性。

那么A称为子类,B为父类。(父类又叫:基类)

使用继承可以不再用重复写代码的情况下,从而重复使用代码。

提高了编程效率。

2.正确使用继承思想:

      1.先抽象然后再继承

      2.继承已经存在的类,可拓展或是修改原始功能

3.在继承里的属性查找顺序:

对象自己的----->所在的类中----->父类----->父类的父类------->Object

4.继承语法表达:

class 类名称(父类名称):
      #类的内容

#在python中可以继承多个父类

5,派生

简述:

在继承中,如果子类中出现了与父类中不同的属性和方法时,那么这个子类我们称为派生类

由于子类一般都不会与父类一摸一样,所以派生类都是指的是子类。

6,覆盖

简述:

也称之为重写。当子类出现了与父类名称完全一致的属性或方法时,子类的属性和方法会覆盖父类的,也就是说当子类找同样的属性和方法时,都是找子类自己的。

7,子类中访问父类中数据的语法:

方式1:
super(当前类名称,self).你要调的父类的属性或方法
方式2:
super().你要调的父类的属性或方法
方式3:
类名称.你要调的父类的属性或方法(self)
#方式3与继承无关 

关键点:当子类继承父类后,而且覆盖了父类的__init__方法时,

必须在初始化方法的第一行调用父类的__init__方法,

并传入父类所需要的参数

二,组合

1,简述:

     组合使用来描述两个对象之间的关系的,而且两个对象不是同个类型,而是对象1有对象2的关系

     比如,学生这个对象有电脑这个对象。

     将对象作为另一个对象的属性。

2,目的:

      也是为了重用现有代码

      相对继承来说,偶合度降低

三,菱形继承

1.新式类

任何显式或隐式的继承自己对象的类就称之为新式类。

在python3中全都是新式类

当出现了菱形继承时,在新式类里查找顺序,先深度,当遇到了共同的父类时,再广度找。

如下图:

情况一:当有共同父类时:

 情况二:当有个没有共同父类时:

2.经典类

不是对象的子类,仅在python2中出现

当出现了菱形继承时,深度就是优先的查找顺序。

 

原文地址:https://www.cnblogs.com/wujc3/p/11246873.html

时间: 2024-08-30 01:11:53

面向对象概论之继承简述,组合简述,菱形继承简述的相关文章

C++继承详解之三——菱形继承+虚继承内存对象模型详解vbptr(1)

在我个人学习继承的过程中,在网上查阅了许多资料,这些资料中有关菱形继承的知识都是加了虚函数的,也就是涉及了多态的问题,而我在那个时候并没有学习到多态这一块,所以看很多资料都是云里雾里的,那么这篇文章我想以我自己学习过程中的经验,由简到较难的先分析以下菱形继承,让初学者先对这个问题有一点概念,在后面会由浅入深的继续剖析. 本篇文章不会涉及到多态也就是虚函数的菱形继承,在后面的文章更新中,我会慢慢把这些内容都加进去. 菱形继承(也叫钻石继承)是下面的这种情况: 对应代码如下: #include <i

菱形继承的内部实现方式

问题: 由于将下图定义为多继承类型时,子类会发生二义性与数据冗余,而用菱形继承时会解决这些问题,菱形继承发生了些什么?又是怎么实现的? 本次试着说明菱形继承的机理(实现方法) 按照上图建立多继承,编写代码: class Base { public:  virtual void func1()  {   cout << "Base::func1()" << endl;  } protected:  int _a; }; class Base1: public Ba

【C++】虚拟菱形继承的解析

在继承中经常会遇到这种情况:有一个超类A,子类B1,B2继承了A,而类D又继承了父类B1,B2.在这种情况下如果按照我们以前的正常的菱形继承的话会有一个问题是子类C会继承两次超类A中的成员,当在C中想访问继承来自B1,B2中A的元素会出现两个问题: 问题一.数据的冗余 问题二.访问的二意性 出现了这种问题那么我们该如何解决呢? C++中为了解决这个问题引入了虚拟菱形继承,那么虚拟菱形继承是怎么解决的呢? 首先给大家先画两个图比较下菱形继承和虚拟菱形继承在继承时在内存中的成员分布情况: 一. 菱形

9. 实现类复用的两个手段——继承与组合

一.实现类复用概述 1. 如果需要复用一个类,可以把这个类当成基类来继承 如果访问权限允许,子类可以直接访问父类的成员变量和方法,相当于子类可以直接复用父类的成员变量和方法 继承带来高度复用的同时,也严重地破坏了父类的封装性 如果只是出于类复用的目的,并不一定需要使用继承,完全可以使用组合来实现 2. 如果需要复用一个类,还可以把这个类当成新类的组合成分 新类可以直接复用这个类的public成员变量和方法 二.实现类复用的补充说明 1. 继承方式中,子类可以直接获得父类的public方法,程序使

C++反汇编第四讲,认识多重继承,菱形继承的内存结构,以及反汇编中的表现形式.

目录: 1.多重继承在内存中的表现形式 多重继承在汇编中的表现形式 2.菱形继承 普通的菱形继承 虚继承 汇编中的表现形式 一丶多重继承在内存中的表现形式 高级代码: class Father1 { public: Father1(){}//空构造 virtual ~Father1(){} //空析构 virtual void Player(){} //玩耍的函数 int m_price;//金钱 }; class Father2 { public: Father2(){} virtual ~F

类的继承、派生、组合、菱形的继承、多态

类的继承 继承是一种新建的类的方式,新建的类成为子类,被继承的类称为父亲 继承的特性是:子类会遗传父亲的属性 继承是类与类之间的关系 使用继承目的,可以减少代码的咒余 在python中,父类和子类只有在继承的时候才会产生 继承是为了拿到父类的所有东西 class Parent_Foo: def __init__(self,first_name,money,car,house) self.first_name = first_name self.car = car self.house =hous

面向对象的继承与组合

面向对象的优势在于类的复用.继承与多态都是对类进行复用,它们是一个类级别的复用,一个是方法级别的复用.提到继承必提组合,二者有何异同?PHP到底有没有多态?若没有,则为什么没有?有的话,和其他语言中的多态又有什么区别? 继承和组合都是提高代码可重用性的手段.在设计模型时,可以按照语言识别类之间的组合关系和继承关系. 从方法复用的角度考虑,如果两个类中有很多相同的代码和方法,可以从这两个类中抽象出一个父亲,提供公共方法,然后两个类作为子类,提供个性方法. 这时继承语义更好. 而组合就没有这么多限制

面向对象--继承和组合

面向对象的组合用法 软件重用的重要方式除了继承之外还有另外一种方式,即:组合 组合指的是,在一个类中以另外一个类的对象作为数据属性,称为类的组合 圆环是由两个圆组成的,圆环的面积是外面圆的面积减去内部圆的面积.圆环的周长是内部圆的周长加上外部圆的周长.这个时候,我们就首先实现一个圆形类,计算一个圆的周长和面积.然后在"环形类"中组合圆形的实例作为自己的属性来用 from math import pi class Circle: ''' 定义了一个圆形类: 提供计算面积(area)和周长

面向对象-继承,顺序查找,派生,子类访问父类,菱形继承

OOP的三大特征(优势) 1.封装 2.继承 3.多态 继承:是两个对象之间产生的一种关系 a继承b 在OOP的程序中继承是描述类与类之间的一种关系继承的好处:程序中 一个类a继承另一个类b a就可以使用B的属性和方法具体的说:继承极大的提高了代码的重用性继承描述的是 什么 是什么的关系 注意:在使用集成时,要自己分析.类与类之间的关系 不应该违反显示生活中的原则在使用继承的时候一定是先抽象 在继承抽象:抽取一堆类共同拥有的内容 形成一个新的抽象的概念(也称为公共基类) 这个过程就叫做 抽象注意