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方法,会有不同的结果
# 对象调用哪个方法,就去自己类找这个方法,不存在就找父类,还不存在就找父类的父类...

你可能感兴趣的:(Python,python,学习,开发语言)