📜  Kotlin 中的多态性

📅  最后修改于: 2022-05-13 01:54:31.578000             🧑  作者: Mango

Kotlin 中的多态性

多态性一词意味着具有多种形式。简单来说,我们可以将多态性定义为消息以多种形式显示的能力。

现实生活中的插图:多态性

一个人同时可以有不同的特征。就像一个男人同时是父亲、丈夫、雇员。因此,同一个人在不同的情况下具有不同的行为。这称为多态性。多态性被认为是面向对象编程的重要特征之一。多态性允许我们以不同的方式执行单个操作。换句话说,多态性允许您定义一个接口并具有多个实现。 “poly”这个词意味着许多,“morphs”意味着形式,所以它意味着许多形式。

多态性的类型

多态性主要分为两种:

  1. 编译时多态性
  2. 运行时多态性

例子

示例 1:编译时多态性

让我们从编译时多态性开始。在编译时多态中,函数的名称,即签名保持不变,但参数或返回类型不同。在编译时,编译器会根据参数类型等来解析我们尝试调用的函数。看看这个例子:

Kotlin
fun main (args: Array) {
  println(doubleof(4))
  println(doubleof(4.3))
  println(doubleof(4.323))
}
  
fun doubleof(a: Int):Int {
  return 2*a
}
  
fun doubleOf(a:Float):Float {
  return 2*a
}
  
fun doubleof(a:Double):Double {
  return 2.00*a
}


Kotlin
fun main(args: Array){
  var a = Sup()
  a.method1()
  a.method2()
    
  var b = Sum()
  b.method1()
  b.method1()
}
  
open class Sup{
   open fun method1(){
       println("printing method 1 from inside Sup")
   }
   fun method2(){
       println("printing method 2 from inside Sup")
   }
}
  
class Sum:Sup(){
   override fun method1(){
       println("printing method 1 from inside Sum")
   }
}


输出:

8
8.6
8.646

示例 2:运行时多态性

现在,让我们谈谈运行时多态性。在运行时多态中,编译器在运行时解析对覆盖/重载方法的调用。我们可以使用方法覆盖来实现运行时多态性。让我们尝试一个扩展超类并覆盖其成员方法之一的示例:

科特林

fun main(args: Array){
  var a = Sup()
  a.method1()
  a.method2()
    
  var b = Sum()
  b.method1()
  b.method1()
}
  
open class Sup{
   open fun method1(){
       println("printing method 1 from inside Sup")
   }
   fun method2(){
       println("printing method 2 from inside Sup")
   }
}
  
class Sum:Sup(){
   override fun method1(){
       println("printing method 1 from inside Sum")
   }
}

输出:

printing method 1 from inside Sup
printing method 2 from inside Sup
printing method 1 from inside Sum
printing method 2 from inside Sup

在这里,编译器在运行时解析要执行的方法。