Java 多态

Java 多态,多态是面向对象特征之一,它允许我们以不同的方式执行单个动作。例如,假设我们有一个Animal类,它有一个方法sound()。由于这是一个泛型类,所以我们不能给它一个实现,如:RoarMeowOink等。我们不得不给出一个通用的消息。

public class Animal{
   ...
   public void sound(){
      System.out.println("Animal is making a sound");
   }
}

现在假设我们动物类的两个子类:HorseCat扩展(参见继承Animal类。我们可以提供相同的方法实现,如下所示:

public class Horse extends Animal{
...
    @Override
    public void sound(){
        System.out.println("Neigh");
    }
}

public class Cat extends Animal{
...
    @Override
    public void sound(){
        System.out.println("Meow");
    }
}

正如您所看到的那样,尽管我们对所有子类sound()都有共同的操作,但是有不同的方法来执行相同的操作。这是多态的完美示例(允许我们以不同方式执行单个操作的功能)。仅调用泛型sound()方法没有任何意义,因为每个Animal都有不同的声音。因此,我们可以说该方法执行的操作基于对象的类型。

什么是编程中的多态

多态是一种方法根据它所作用的对象做不同事物的能力。换句话说,多态允许您定义一个接口并具有多个实现。正如我们在上面的例子中看到的那样,我们已经定义了方法sound()并且在不同的 2 个子类中具有它的多个实现。
将在运行时确定将调用哪个sound()方法,因此我们上面给出的示例是运行时多态示例

多态的类型和方法重载&覆盖在单独的教程中。你可以在这里引用它们:
1. Java 中的方法重载 – 这是编译时间(或静态多态)的一个例子
2. Java 中的方法覆盖 – 这是运行时间(或动态多态)的一个例子
3. 多态的类型 – 运行时和编译时间 – 这是我们的下一个教程,我们详细介绍了多态的类型。在推荐这个主题之前,我会建议你通过方法重载和覆盖。

让我们写下它的完整代码:

例 1:Java 中的多态

运行时多态示例:

Animal.java

public class Animal{
   public void sound(){
      System.out.println("Animal is making a sound");   
   }
}

Horse.java

class Horse extends Animal{
    @Override
    public void sound(){
        System.out.println("Neigh");
    }
    public static void main(String args[]){
        Animal obj = new Horse();
        obj.sound();
    }
}

输出:

Neigh

Cat.java

public class Cat extends Animal{
    @Override
    public void sound(){
        System.out.println("Meow");
    }
    public static void main(String args[]){
        Animal obj = new Cat();
        obj.sound();
    }
}

输出:

Meow

例 2:编译时多态

方法重载另一方面是编译时多态示例。

class Overload
{
    void demo (int a)
    {
       System.out.println ("a: " + a);
    }
    void demo (int a, int b)
    {
       System.out.println ("a and b: " + a + "," + b);
    }
    double demo(double a) {
       System.out.println("double a: " + a);
       return a*a;
    }
}
class MethodOverloading
{
    public static void main (String args [])
    {
        Overload Obj = new Overload();
        double result;
        Obj .demo(10);
        Obj .demo(10, 20);
        result = Obj .demo(5.5);
        System.out.println("O/P : " + result);
    }
}

这里方法demo()重载 3 次:第一种方法有 1 个int参数,第二种方法有 2 个int参数,第三种方法有double参数。要调用哪个方法取决于调用方法时传递的参数。这发生在编译时而不是运行时,因此这种类型的多态称为编译时多态。

输出:

a: 10
a and b: 10,20
double a: 5.5
O/P : 30.25

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程