Java中的多态性– OOPS概念

时间:2020-01-09 10:34:45  来源:igfitidea点击:

这篇文章讨论了OOPS概念多态之一和Java中多态的用法。

什么是多态

与继承,抽象和封装一样,多态是面向对象编程的四个基本原理之一。

多态性是希腊语单词,其中poly表示"许多",而morph表示"从一种形式变为另一种形式"。用面向对象的术语,它涉及采用多种形式的同一对象引用。

Java中的多态性概念被设计为具有方法的接口,并且派生类根据其要求实现该接口。然后,使用该单个接口的引用,可以调用那些已实现的类方法中的任何一个。因此,一个接口引用在这里可以根据所引用的类采用多种形式。

Java中的多态性

Java中有两种类型的多态性

  • 编译时多态-也称为静态多态。 Java中的静态多态性是通过方法重载实现的,因为它在编译时本身就知道将调用哪个重载方法。
  • 运行时多态-也称为动态多态。 Java中的动态多态性是通过方法重写实现的。在方法重写中,在运行时解决将调用哪个重写方法。

Java中的运行时多态示例

在该示例中,存在一个接口doing与方法doPayment(double amount)。该接口由两个类实现。

public interface Payment {
  void doPayment(double amount);
}

实施-1级

public class CashPayment implements Payment {
  @Override
  public void doPayment(double amount) {
    System.out.println("Cash payment of amount- " + amount);
  }
}

实施班-2

public class CCPayment implements Payment {
  @Override
  public void doPayment(double amount) {
    System.out.println("Swipe credit card for amount- " + amount);
  }
}
public class MainClass {
  public static void main(String[] args) {
    // Reference of CashPayment instance
    Payment payment = new CashPayment();
    payment.doPayment(106.78);
    // Now holding reference of CCPayment instance
    payment = new CCPayment();
    payment.doPayment(77.67);
  }
}

输出:

Cash payment of amount- 106.78
Swipe credit card for amount- 77.67

如我们所见,在运行时,Payment的引用可以引用这些实现中的任何一种,并基于当前引用来调用class的方法。

Java中的编译时多态示例

public class MainClass {
  public static void main(String[] args) {
    MainClass obj = new MainClass();	
    System.out.println("Addition Result- " + obj.add(7,  8));
    System.out.println("Addition Result- " + obj.add(123.56, 34.78));
  }

  public int add(int a, int b) {
    return a + b;
  }

  public double add(double a, double b) {
    return a + b;
  }
}

在该类中,有两个名称相同(添加)的方法,但是参数的类型不同,因此它们是重载方法。根据在方法调用中传递的参数类型,将调用适当的add方法。此绑定是在编译时本身完成的。

输出:

Addition Result- 15
Addition Result- 158.34