什么是 Java 的多态特性?

2024-08-25 08:54:07 163
Java 的多态(Polymorphism)是面向对象编程中的一个核心概念,指的是同一个方法调用在不同对象上表现出不同的行为。多态性允许对象以不同的形式执行同一个操作,从而提高了代码的灵活性和可维护性。

多态的类型

  1. 编译时多态(静态多态性): 也叫方法重载(Overloading),指的是在同一个类中可以定义多个同名方法,但这些方法的参数列表(参数的数量、类型、顺序)必须不同。编译器在编译时根据方法的参数来决定调用哪个方法。

  2. 运行时多态(动态多态性): 也叫方法重写(Overriding),指的是子类可以重写父类的方法。通过父类的引用调用子类对象的方法时,实际执行的是子类重写后的方法。这种行为在运行时动态决定。

示例讲解

编译时多态(方法重载)

class MathOperation {
    // 重载方法:加法,两个整数相加
    int add(int a, int b) {
        return a + b;
    }

    // 重载方法:加法,两个小数相加
    double add(double a, double b) {
        return a + b;
    }
}

public class Main {
    public static void main(String[] args) {
        MathOperation operation = new MathOperation();

        // 调用第一个重载方法
        System.out.println(operation.add(5, 10)); // 输出:15

        // 调用第二个重载方法
        System.out.println(operation.add(5.5, 10.5)); // 输出:16.0
    }
}

在这个例子中,add 方法有两个不同的版本,编译器根据传递的参数类型来决定调用哪个版本。

运行时多态(方法重写)

class Animal {
    // 父类中的方法
    void sound() {
        System.out.println("Animal makes a sound");
    }
}

class Dog extends Animal {
    // 子类重写父类的方法
    @Override
    void sound() {
        System.out.println("Dog barks");
    }
}

class Cat extends Animal {
    // 子类重写父类的方法
    @Override
    void sound() {
        System.out.println("Cat meows");
    }
}

public class Main {
    public static void main(String[] args) {
        Animal myDog = new Dog(); // 父类引用指向子类对象
        Animal myCat = new Cat(); // 父类引用指向子类对象

        myDog.sound(); // 输出:Dog barks
        myCat.sound(); // 输出:Cat meows
    }
}

在这个例子中,虽然 myDogmyCat 的类型都是 Animal,但实际调用的 sound 方法是 DogCat 类中的重写方法。这就是运行时多态的表现形式。

总结

多态的核心是同一个操作在不同对象上有不同的表现形式。这种特性使得代码更加灵活,可以轻松地扩展和维护。无论是方法重载还是方法重写,都体现了 Java 多态性的应用。