【Python】面向对象 - 多态 ( 多态概念 | 多态用法 | 抽象类概念 | 代码示例 )
一、面向对象 - 多态
1、多态概念
" 多态 " 指的是 多种状态 , 相同类型 的 不同 对象 完成 某个行为时 , 会得到不同的状态 ;
多态 一般 是 通过 继承 和 方法重写 实现 , 多个子类 继承 同一个父类 ,
这些 子类对象 重写 父类的 方法 , 实现不同的逻辑 ,
为 父类 类型变量 赋值 不同的 子类对象 , 当调用被重写的父类方法时 , 执行不同的逻辑 , 此时就实现了多态 ;
子类重写父类的方法 , 这意味着子类可以定义与父类相同名称的方法 , 但实现方式可以不同 ;
当通过子类对象调用该方法时 , 将执行子类的方法 , 而不是父类的方法 ;
这种行为使得子类可以对相同的消息做出不同的响应 , 实现了多态 ;
2、多态用法
" 多态 " 是通过继承关系 实现的 ;
多态使用规则 :
- 父类进行成员声明 , 大多数是成员方法声明 ;
- 子类重写成员方法 , 做实际的工作 ;
- 为 多个 父类 类型变量 分别 赋值 不同类型的 子类 实例对象 ;
- 执行 父类 实例对象 的同一个方法 , 得到的结果是不同的 ;
3、代码示例 - 多态
下面的代码中 ,
Animal 类是 父类 , 其中定义了行为 make_sound 方法 ,
Dog 类 和 Cat 类 继承 Animal 类 , 并重写了 Animal 父类的 make_sound 方法 ,
为 类型注解 为 Animal 类型的变量 , 分别赋值 Animal 实例对象 , Dog 实例对象 , Cat 实例对象 ,
当调用 这三个对象的 make_sound 方法 , 会执行不同的操作 ;
- Animal 实例对象 打印 " 动物发音 " ;
- Dog 实例对象 打印 " 汪汪 " ;
- Cat 实例对象 打印 " 喵喵 " ;
代码示例 :
"""
面向对象 - 多态
"""
class Animal:
name = "Animal"
age = 0
def make_sound(self):
print("动物发音")
class Dog(Animal):
def make_sound(self):
print("汪汪")
class Cat(Animal):
def make_sound(self):
print("喵喵")
animal: Animal = Animal()
animal.make_sound()
print("")
dog: Animal = Dog()
dog.make_sound()
print("")
cat: Animal = Cat()
cat.make_sound()
执行结果 :
Y:\002_WorkSpace\PycharmProjects\pythonProject\venv\Scripts\python.exe Y:/002_WorkSpace/PycharmProjects/HelloPython/hello.py
动物发音
汪汪
喵喵
Process finished with exit code 0
二、抽象类
1、抽象类概念
父类 只 定义 空方法 , 方法体是 pass
, 没有具体实现 ;
- 父类只定义有哪些方法
- 子类负责实现具体的方法逻辑
这种 父类 , 就是 " 抽象类 " ;
方法体为空 , 也就是 pass 的方法 , 称为 " 抽象方法 " ;
有 " 抽象方法 " 的类 , 称为 抽象类 ;
2、代码示例 - 抽象类
定义抽象类 Animal 类 ,
在 Animal 类中, 定义了抽象方法 make_sound 方法 , 该方法的 方法体为空 , 是 pass , 没有任何逻辑 ;
子类 Cat / Dog 继承 Animal 类 , 实现 make_sound 方法 , 分别执行不同的操作 ;
代码示例 :
"""
面向对象 - 多态
"""
class Animal:
def make_sound(self):
pass
class Dog(Animal):
def make_sound(self):
print("汪汪")
class Cat(Animal):
def make_sound(self):
print("喵喵")
dog: Animal = Dog()
dog.make_sound()
print("")
cat: Animal = Cat()
cat.make_sound()
执行结果 :
Y:\002_WorkSpace\PycharmProjects\pythonProject\venv\Scripts\python.exe Y:/002_WorkSpace/PycharmProjects/HelloPython/hello.py
汪汪
喵喵
Process finished with exit code 0
更多推荐
所有评论(0)