Python基础学习011——继承、多态与重写

# 面向对象的三大特征:继承,封装,多态
# 封装:根据职责,将属性和方法封装到一个类中,即类的定义过程
# 继承:实现代码的重用,相同代码不需要反复编写
# 多态:不同的对象调用相同的方法,产生不同的效果,增加代码灵活度
# ---------------------------------------------------------------------
# 继承:class 类名(父类名):父类(基类)子类(派生类)
# 子类继承父类后,子类的对象可以直接使用父类的 公有属性
# 没有写父类的类,实际也有父类object,object是python中的最原始的类
"""
 案例:
 定义一个animal类,方法eat.
 定义一个dog类,继承animal类,在定义一个dark方法
 定义一个xiaotian_dog类,定义一个fly方法

 备注:只有一个父类的继承方式叫作单继承
 """


class Animal:
    def eat(self):
        print('吃东西')


ani = Animal()
ani.eat()
print('-' * 20)


class Dog(Animal):
    def bark(self):
        print("汪汪汪")


dog = Dog()
dog.eat()
dog.bark()
print('-' * 20)


class XiaoTianDog(Dog):
    def fly(self):
        print('会飞啦')


xtd = XiaoTianDog()
xtd.eat()
xtd.bark()
xtd.fly()
print('-' * 20)


# ------------------------------------------------------------
# 重写:在子类中定义了与父类名字相同的方法,父类中的方法不能满足子类对象需求,所以要重新
# 重写后子类调用自己的方法,不再调用父类的方法
# 重写方式:覆盖与扩展.覆盖:父类中的功能完全抛弃.扩展:父类中的功能还有,只是添加一些新功能
# 覆盖:定义同名方法,直接在方法中写新的代码
class Dog1(Dog):
    def bark(self):
        """覆盖式重写Dog类的bark方法,汪汪汪改成不需要叫"""
        print('神仙不需要叫')


xtq = Dog1()
xtq.bark()
print('-' * 20)


# 扩展:定义同名方法,在合适的地方调用父类中的方法super().方法
class Dog2(Dog):
    def bark(self):
        """扩展式重写Dog类的bark方法,汪汪汪完说人话"""
        super().bark()      # super直接继承于object类
        print("说人话")


xtq2 = Dog2()
xtq2.bark()
print('-' * 20)

# ---------------------------------------------------------------------------
# 多态:同一个方法传入不同的对象,产生不同的执行结果
# 例如Dog1和Dog2,分别重写了bark方法,dog1的对象调用bark和dog2的对象调用bark方法,会有不同的结果
# 对象调用哪个方法,就去自己类找这个方法,不存在就找父类,还不存在就找父类的父类...

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值