多态及实现方式

Posted hhd-shuai

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了多态及实现方式相关的知识,希望对你有一定的参考价值。

多态的定义

  多态性是面向对象编程的又一个重要特征,它是指在父类中定义的属性和方法被子类继承之后,可以具有不同的数据类型或表现出不同的行为,这使得同一个属性或方法在父类及其各个子类中具有不同的含义。

  对面向对象来说,多态分为编译时多态和运行时多态。其中编译时多态是静态的,主要是指方法的重载,它是根据参数列表的不同来区分不同的方法。通过编译之后会变成两个不同的方法,在运行时谈不上多态。而运行时多态是动态的,它是通过动态绑定来实现的,也就是大家通常所说的多态性。

为什么需要多态?

多态的作用:

1.提高程序可复用性 

  首先讲封装和继承:封装是把过程和数据包围起来,对数据的访问只能通过已定义的界面,他把实现的细节影藏起来了,比如你在java中去实现一个类,这个类中提供了一些功能方法,你只需要知道你需要传递什么样的参数,会达到什么样的效果,实现细节在类中定义好了。从而使得代码模块化;而继承可以扩展已存在的代码模块,目的是实现代码重用。

  运用多态,应用程序不必为每一个派生类编写功能调用,只需要对抽象基类进行处理即可。大大提高程序的可复用性。

2.解耦合,提高可扩充性和可维护性

  耦合度讲的是模块模块之间,代码代码之间的关联度,通过对系统的分析把他分解成一个一个子模块,子模块提供稳定的接口,达到降低系统耦合度的的目的,模块模块之间尽量使用模块接口访问,而不是随意引用其他模块的成员变量。

  派生类的功能可以被基类的方法或引用变量所调用,这叫向后兼容,可以提高可扩充性和可维护性。 

多态的实现

  这里以java为例。Java 实现多态有 3 个必要条件:继承、重写和向上转型。只有满足这 3 个条件,开发人员才能够在同一个继承结构中使用统一的逻辑实现代码处理不同的对象,从而执行不同的行为。

  • 继承:在多态中必须存在有继承关系的子类和父类。
  • 重写:子类对父类中某些方法进行重新定义,在调用这些方法时就会调用子类的方法。
  • 向上转型:在多态中需要将子类的引用赋给父类对象,只有这样该引用才既能可以调用父类的方法,又能调用子类的方法。

  编译时多态

  方法重载都是编译时多态。根据实际参数的数据类型、个数和次序,Java在编译时能够确定执行重载方法中的哪一个。

  方法覆盖表现出两种多态性,当对象引用本类实例时,为编译时多态,否则为运行时多态。

  example

  

      public class Test {  
           public static void main(String[] args) {  
              Person person = new Person();         // 对象引用本类实例  
              Student student = new Student();                
              System.out.println(person.show()); // 编译时多态,执行Person类的show() 方法
              System.out.println(student.show()); // 编译时多态,执行student类的show() 方法 
              }  
      }  
    
      class Person{  
              public String show() {  
              String name = "person";  
              return name;  
           }  
      }  
    
      class Student extends Person{  
           public String show(){  
             String name = "student";  
              return name;  
             }  
      }  

   运行时多态

  父类对象p引用子类实例时

  1. Person p = new Student();     
  2. p.show();  

   Java支持运行时多态,意为p.show()实际执行p所引用实例的show(),究竟执行Person类还是Student类的方法,运行时再确定。如果Student类声明了show()方法,则执行之;否则执行Person类的show()方法。

 

   程序运行时,Java从实例所属的类(new 类)开始寻找匹配的方法执行,如果当前类中没有匹配的方法,则沿着继承关系逐层向上,依次在父类或各祖先类中寻找匹配方法,直到Object类。

  运行时多态性是面向对象程序设计代码重用的一个最强大机制,动态性的概念也可以被说成“一个接口,多个方法”。Java实现运行时多态性的基础是动态方法调度,它是一种在运行时而不是在编译期调用重载方法的机制

参考

 https://blog.csdn.net/qq_28081081/article/details/80413186

以上是关于多态及实现方式的主要内容,如果未能解决你的问题,请参考以下文章

多态及实现方式

c++多态及虚函数表内部原理实战详解

多态继承thissuper及多态执行方法时的原理

java实现多态有几种方式?分别是啥?

多态及其实现方式

js面向对象实现方式的演变及常用方法