多态小结

多态: 顾名思义就是多种表现状态

最直观的理解:

  • 有对象名称,用对象名称打点调用方法
  • 在不同的时候执行的方法的功能是不一样的.

*多态的判断标准:

  • 跨类且继承,多态是以继承作为基础的
  • 子类重写长辈的方法
  • 子类对象赋值给长辈的引用

    比如:
    CommonPerson cp=new Student();
    Person p=new Student();
    Object obj=new Student();

  • 用长辈的引用打点调用方法
    • 用对象打点能调用出哪些方法,取决于这个对象所对应的类或接口中的有哪些方法
    • 如果用长辈的引用打点调用的方法,是重写过的方法,那么就执行子类重写后的方法.
    • 如果长辈的引用打点调用个方法是没有重写的方法,则执行的是本长辈中的方法
能够表达出多态的应用场景:

1.以长辈作为方法或函数的参数(控制类:一般含有抽象类的所有方法)
2.以长辈作为方法或函数的返回值(简单共场)

如果不用多态:

  • 代码的书写量大
  • 结构不优化
  • 代码的复用率不高(复用率低)
  • 最终导致开发效率低
  • 优点,代码的可读性很高

如果使用多态:

  • 把所有的共用属性抽象出来放在长
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
是面向对象编程的一个重要特性,它允许在派生类中重写基类中的同名方法,并且在运行时根据对象的实际类型来选择正确的方法实现。多性可以通过虚函数来实现。 在多性的实现中,程序可以使用基类指针或引用指向派生类对象,并调用同名的虚函数。在运行时,程序会根据指针或引用指向的对象的实际类型来选择正确的函数实现。 例如,我们可以定义一个基类 `Shape` 和它的两个派生类 `Circle` 和 `Rectangle`,并在 `Shape` 类中声明一个虚函数 `draw()`,在派生类中重写 `draw()` 方法: ```c++ class Shape { public: virtual void draw() { // 基类中的默认实现 } }; class Circle : public Shape { public: void draw() override { // 画圆形的实现 } }; class Rectangle : public Shape { public: void draw() override { // 画矩形的实现 } }; ``` 现在,我们可以使用指向 `Shape` 类的指针或引用来指向 `Circle` 或 `Rectangle` 对象,并调用它们的 `draw()` 方法: ```c++ Shape* s1 = new Circle(); Shape* s2 = new Rectangle(); s1->draw(); // 调用 Circle 类中的 draw() 方法 s2->draw(); // 调用 Rectangle 类中的 draw() 方法 ``` 在这个例子中,`s1` 指向一个 `Circle` 对象,因此调用 `s1->draw()` 时会调用 `Circle` 类中的 `draw()` 方法。类似地,`s2` 指向一个 `Rectangle` 对象,因此调用 `s2->draw()` 时会调用 `Rectangle` 类中的 `draw()` 方法。 多性让程序具有更高的灵活性和可扩展性,因为它允许我们在不改变基类代码的情况下增加新的派生类。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值