Java中的多态性

时间:2020-02-23 14:35:29  来源:igfitidea点击:

在本教程中,我们将看到Java中的多态。

Java中的多态性是面向核心对象的编程概念之一,具有抽象,封装和继承。

Polymorphism意味着许多形式的一个名字。
在Java中,通过方法重载(overloading)和方法可以实现多态性。

Java中有两种类型的多态性。

  • 编译时间多态性。
  • 运行时间多态性。

编译时间多态性

Compile time Polymorphism是在Java中重载的方法。

我们可以定义具有相同名称但不同的方法参数的各种方法。
我们可以阅读更多有关方法重载的信息。

让我们通过示例来理解:

package org.igi.theitroad;
 
public class MethodOverloadingExample {
	public void method1(int a)
	{
		System.out.println("Integer: "+a);
	}
	public void method1(double b)
	{
		System.out.println("Double "+b);
	}
	public void method1(int a, int b)
	{
		System.out.println("Integer a and b:"+a+" "+b);
	}
	public static void main(String args[])
	{
		MethodOverloadingExample moe=new MethodOverloadingExample();
		moe.method1(20);
		moe.method1(30.0);
		moe.method1(20, 30);
	}
}

运行上面的程序时,我们将得到以下输出:

Integer:20 Double 30.0整数A和B:20 30

正如我们可以在此处看到的,我们使用相同的方法名称但是不同的方法参数。
编译器将根据最佳匹配的参数调用适当的方法。

运行时多态性

Runtime Polymorphism是在Java中重写(overwriting)的方法。

如果子类具有与基类相同的方法,那么它被称为重写(overwriting)或者在另一个单词中的方法,如果子类向其一个父母类中存在的任何方法提供特定的方法,那么它被称为 method overriding

让我们说你有父母课 Shape和儿童班一样 Rectanglecircle

package org.igi.theitroad;
 
public class Shape {
 
	public void draw()
	{
		System.out.println("Drawing Shape");
	}
	public static void main(String[] args) {
		Shape s=new Rectangle();
		s.draw();
		
		s=new Circle();
		s.draw();
	}
 
}
class Rectangle extends Shape
{
	public void draw()
	{
		System.out.println("Drawing Rectangle");
	}
}
 
class Circle extends Shape
{
	public void draw()
	{
		System.out.println("Drawing Circle");
	}
}

请注意,我们在此处将子对象分配给父对象。

Shape s=new Rectangle();

正如我们可以看到的,我们在子类矩形中具有重写(overwriting)的绘制方法,Circle.jvm在运行时决定它需要调用的方法,具体取决于对象分配。

这就是为什么这被称为 Run time polymorphism