day6面向对象--继承多态

(野生程序员) (野生程序员)     2022-09-10     782

关键词:

继承

    继承:就像遗传一样,继承就是拥有父类的所有方法和属性,并且能够定义自己独特的属性和方法,对上面的类进行扩展。

    可以什么都不写,直接继承父类,如下:

   

class People(object):

    def __init__(self,name,age):
        self.name = name
        self.age = age

    def eat(self):
        print("%s is eating......" %self.name)

    def sleep(self):
        print("%s is sleeping....." %self.name)

    def talk(self):
        print("%s is talking......" %self.name)

class Man(People):
    pass

class Woman(People):
    pass

m1 = Man("chenronghua",16)
m1.eat()
运行结果如下:
chenronghua is eating......

    上面代码可以看出,首先定义了一个People的类,还有一个Man(People)类直接继承People类。

    下面,我们在上面的Man()类中定义一个单独的方法,如下:

class People(object):

    def __init__(self,name,age):
        self.name = name
        self.age = age

    def eat(self):
        print("%s is eating......" %self.name)

    def sleep(self):
        print("%s is sleeping....." %self.name)

    def talk(self):
        print("%s is talking......" %self.name)

class Man(People):
    def piao(self):
        print("%s is piaoing......20s......" %self.name)

class Woman(People):
    pass

m1 = Man("chenronghua",16)
m1.piao()
运行结果如下:
chenronghua is piaoing......20s......

    上面,我们给Man()增加了新的方法,可以看出,能够执行。

    下面,我们来重写父类。扩展新功能,子类并且要具有父类的所有方法与属性。在子类中调用父类:

class People(object):

    def __init__(self,name,age):
        self.name = name
        self.age = age

    def eat(self):
        print("%s is eating......" %self.name)

    def sleep(self):
        print("%s is sleeping....." %self.name)

    def talk(self):
        print("%s is talking......" %self.name)

class Man(People):
    def piao(self):
        print("%s is piaoing......20s......" %self.name)

    def sleep(self):
        People.sleep(self)
        print("man is sleeping......")

class Woman(People):
    pass

m1 = Man("chenronghua",16)
m1.sleep()

    上面代码中,子类调用了父类中的方法,要明白本质,创建实例的本质是增加了一个新的内存变量。

    不同类中方法的调用:

class People(object):

    def __init__(self,name,age):
        self.name = name
        self.age = age

    def eat(self):
        print("%s is eating......" %self.name)

    def sleep(self):
        print("%s is sleeping....." %self.name)

    def talk(self):
        print("%s is talking......" %self.name)

class Man(People):
    def piao(self):
        print("%s is piaoing......20s......" %self.name)

    def sleep(self):
        People.sleep(self)
        print("man is sleeping......")

class Woman(People):

    def get_birth(self):
        print("%s is borning a bady......" %self.name)

# m1 = Man("chenronghua",16)
# m1.sleep()

w1 = Woman("chenronghua",26)
w1.get_birth()
w1.piao()
运行如下:
chenronghua is borning a bady......
Traceback (most recent call last):
  File "/home/zhuzhu/第六天/inherit.py", line 34, in <module>
    w1.piao()
AttributeError: ‘Woman‘ object has no attribute ‘piao‘

    从上面可以看出,继承同一个父类的子类是方法是不能相互调用的。

   

class People(object):

    def __init__(self,name,age):
        self.name = name
        self.age = age

    def eat(self):
        print("%s is eating......" %self.name)

    def sleep(self):
        print("%s is sleeping....." %self.name)

    def talk(self):
        print("%s is talking......" %self.name)

class Man(People):
    def __init__(self,name,age,money):     #给男的单独增加属性
        People.__init__(self,name,age)
        self.money = money
        print("%s 刚出生就有%s元" %(self.name,self.money))    #构造函数的时候就会执行代码


    def piao(self):
        print("%s is piaoing......20s......" %self.name)

    def sleep(self):
        People.sleep(self)
        print("man is sleeping......")

class Woman(People):

    def get_birth(self):
        print("%s is borning a bady......" %self.name)

m1 = Man("chenronghua",16,100)
m1.sleep()
运行结果如下:
chenronghua 刚出生就有100元
chenronghua is sleeping.....
man is sleeping.....

    从上面代码可以看出,__init__(self,name,age,money)类的初始化,People.__init__(self,name,age)继承,继承父类的属性,普通的继承。

    下面来看看新式类中的继承。

class People(object):

    def __init__(self,name,age):
        self.name = name
        self.age = age

    def eat(self):
        print("%s is eating......" %self.name)

    def sleep(self):
        print("%s is sleeping....." %self.name)

    def talk(self):
        print("%s is talking......" %self.name)

class Man(People):
    def __init__(self,name,age,money):     #给男的单独增加属性
        super(Man,self).__init__(name,age)
        self.money = money
        print("%s 刚出生就有%s元" %(self.name,self.money))    #构造函数的时候就会执行代码


    def piao(self):
        print("%s is piaoing......20s......" %self.name)

    def sleep(self):
        People.sleep(self)
        print("man is sleeping......")

class Woman(People):

    def get_birth(self):
        print("%s is borning a bady......" %self.name)

m1 = Man("chenronghua",16,100)
m1.sleep()

 

    新式类是用super()函数来实现继承的,super(Man,self).__init__(name,age)实现继承,新式类和旧式类的差别主要体现在多继承上面。

    下面看下类的多继承问题:

class People(object):

    def __init__(self,name,age):
        self.name = name
        self.age = age

    def eat(self):
        print("%s is eating......" %self.name)

    def sleep(self):
        print("%s is sleeping....." %self.name)

    def talk(self):
        print("%s is talking......" %self.name)

class Relation(object):

    def make_friends(self,obj):
        print("%s is making friends with %s" %(self.name,obj.name))

class Man(People,Relation):
    def __init__(self,name,age,money):     #给男的单独增加属性
        super(Man,self).__init__(name,age)    #超级父类,Man继承父类name,age
        self.money = money
        print("%s 刚出生就有%s元" %(self.name,self.money))    #构造函数的时候就会执行代码


    def piao(self):
        print("%s is piaoing......20s......" %self.name)

    def sleep(self):
        People.sleep(self)
        print("man is sleeping......")

class Woman(People,Relation):

    def get_birth(self):
        print("%s is borning a bady......" %self.name)

w1 = Woman("ruhua",18)

m1 = Man("chenronghua",16,100)
m1.make_friends(w1)           #把w1实例当做参数传给make_friends,等价于obj》w1,obj.name》w1.name

    上面代码中,当子类继承多个父类的时候,即便其中一个父类没有实例化,也能调用另外一个父类的方法和属性。通过子类把两个父类关联到一起。

    多态

    一个接口,多个重用

day6面向对象

面向对象介绍(http://www.cnblogs.com/alex3714/articles/5188179.htm)   世界万物,皆可分类   世界万物,皆为对象   只要是对象,就肯定术语某种类  (1)特性   封装、继承、多态   ... 查看详情

day6-面向对象初级语法

本节内容:   1、面向对象编程介绍  2、为什么要用面向对象进行开发?  3、面向对象的特性:封装、继承、多态  4、类、方法 参考文章:http://www.cnblogs.com/alex3714/articles/5188179.html面向过程VS面向对象 编程... 查看详情

day6心得

面向对象编程介绍为什么要用面向对象进行开发?面向对象的特性:封装、继承、多态类、方法、  引子你现在是一家游戏公司的开发人员,现在需要你开发一款叫做<人狗大战>的游戏,你就思考呀,人狗作战,那至... 查看详情

0面向对象三大机制封装继承多态

3行李货物再按一1再按3各种面向对象编程语言相互有别,但都能看到他们对面向对象三大机制的支持,即:”封装、继承、多态“  -封装,隐藏内部实现  -继承,复用现有代码  -多态,改写对象行为  继承是以... 查看详情

day6面向对象

继承1.1  类和类之间的常见关系。   1:既然继承是描述类和类之间的关系,就需要先来了解类和类之间的常见关系1.1.1  现实生活的整体与部分举例说明1:现实生活   1:学生  是人&nbs... 查看详情

java面向对象三大特征之继承和多态(代码片段)

...转型多态代码案例总结前言  上一篇博客我们介绍了Java面向对象思想以及三大特征之一的封装。本文将介绍面向对象三大特征的剩下两个特征——继承和多态,我个人认为继承和多态是三个特征中比较重要且理解起来稍有... 查看详情

面向对象三要素:封装,继承,多态

面向对象三要素是:封装继承多态封装 封装就是事物抽象为类,把对外接口暴露,将实现和内部数据隐藏。继承面向对象编程(OOP)语言的一个主要功能就是“继承”。继承是指这样一种能力:它可以使用现有类的所有功能,... 查看详情

python入门-6面向对象编程:07面向对象三大特征(封装继承多态)-继承(代码片段)

一:面向对象三大特征介绍  Python是面向对象的语言,也支持面向对象编程的三大特性:继承、封装(隐藏)、多态。  封装(隐藏)    隐藏对象的属性和实现细节,只对外提供必要的方法。相当于将“细节封装... 查看详情

面向对象:继承多态

1.继承 子类名:父类名子类可以继承父类所有的公共方法和属性一个父类可以有无数个子类、后辈类一个子类只能有一个亲爹父类、基类子类、派生类、超类    --不同种说法2.多态virtual 虚方法override 重... 查看详情

举例说明java面向对象的封装继承多态

继承就是在面向对象中体现的是is-a的关系,是一个,封装就是写一个类了,多态则体现的是一个行为的多样性参考技术A面向对象编程的三大特性:封装、继承、多态,把对象封装成类,有共同部分的类可以抽象出相同部分封装成... 查看详情

java面向对象编程三大特征-多态

Java面向对象编程三大特征-多态本文关键字:Java、面向对象、三大特征、多态多态是面向对象编程的三大特征之一,是面向对象思想的终极体现之一。在理解多态之前需要先掌握继承、重写、父类引用指向子类对象的相关概念,... 查看详情

面向对象(封装继承多态抽象)

...以修饰,生成GET,SET方法来给外界调用、继承--java继承是面向对象的最显著的一个特征。继承是从已有的来中派生出新的类,新的类能吸收已有类的数据属性和行为,并能扩展新的能力。多态--java的多态是指对非静态方法的多态... 查看详情

面向对象三大特征之继承,多态

//面向对象三大特性//继承//概念:子类可以继承父类的一切//方法重写:在子类里面对父类的方法进行重写//特点:单继承:一个子类只能有一个父类,一个父类可以派生出多个子类//override:重写//overload:重载,编程多态//parent::值... 查看详情

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

面向对象的三个基本特征是:封装、继承、多态。                             &nbs 查看详情

面向对象继承和多态

一、继承继承可以使得子类具有父类的属性和方法或者重新定义、追加属性和方法等。继承可以使得子类别具有父类别的各种属性和方法,而不需要再次编写相同的代码。//父类publicclassFulei{//成员变量privateint_Zhi;//属性publicintZhi;... 查看详情

面向对象封装继承多态

创建一个新项目usingSystem;                  ——usingSystem.Collections.Generic;    .usingSystem.Li 查看详情

面向对象(封装,继承,多态)

面向对象面向对象思想  构造器:new就是一个构造器,作用是:①分配空间;②赋初始值(避免错误,简化输入)  newObject(Parameters)构造器调用构造函数,传参为了赋初始值;  对象的基本元素是:属性和方法  类... 查看详情

前端javascript设计模式前奏--面向对象-封装继承多态(代码片段)

JavaScript面向对象如图所示:1.什么是面向对象1.面向对象的概念2.面向对象的三要素:继承/封装/多态⭐️3.JS的应用举例4.面相对象的意义---数据结构化2.面向对象的概念:类+对象1.面向对象的概念:类+对象1.类(模板)/对象(实例)1.... 查看详情