多态

多态的概念

定义:

它允许不同的对象对同一操作或方法调用做出响应,但具体的行为会根据对象的实际类型而有所不同。多态性提供了一种方式,使得代码能够以统一的接口与不同的数据类型交互,而不需要关心这些数据类型背后的具体实现细节。

多态的好处

  • 提高代码的可读性和可维护性。
  • 降低代码间的耦合度,增加模块化。
  • 允许扩展现有代码而无需修改现有逻辑。

例:

// 定义一个动物的抽象类
abstract class Animal {
    // 抽象方法,具体实现由子类提供
    abstract void makeSound();
    
    // 一个具体的方法,可以在子类中直接使用
    void eat() {
        System.out.println("This animal eats food.");
    }
}

// 定义一个狗类,继承自Animal类
class Dog extends Animal {
    // 重写makeSound方法,提供狗的叫声
    @Override
    void makeSound() {
        System.out.println("Woof woof!");
    }
}

// 定义一个猫类,继承自Animal类
class Cat extends Animal {
    // 重写makeSound方法,提供猫的叫声
    @Override
    void makeSound() {
        System.out.println("Meow meow!");
    }
}

// 主类,用于演示多态
public class PolymorphismDemo {
    public static void main(String[] args) {
        // 创建Animal类型的数组,但实际存储的是Dog和Cat对象
        Animal[] animals = {new Dog(), new Cat()};
        
        // 遍历数组,多态性在这里体现:尽管引用类型是Animal,但实际调用的方法是对象实际类型的makeSound
        for (Animal animal : animals) {
            animal.makeSound(); // 运行时多态
            animal.eat();       // 编译时多态,因为eat方法在Animal类中定义
        }
    }
}

在这个示例中:

  • Animal 是一个抽象类,它定义了一个抽象方法 makeSound() 和一个具体方法 eat()
  • DogCatAnimal 的子类,它们重写了 makeSound() 方法,提供了具体的叫声实现。
  • PolymorphismDemo 类中的 main 方法创建了一个 Animal 类型的数组,但实际存储的是 DogCat 的对象。
  • 通过 Animal 类型的引用调用 makeSound() 方法时,由于多态性,实际执行的是每个对象实际类型的 makeSound() 方法。这就是运行时多态的一个例子。
  • 同时,调用 eat() 方法时,由于这个方法在 Animal 类中已经定义,所以这是编译时多态的一个例子。
posted @ 2024-08-14 11:27  糊涂图-4060  阅读(23)  评论(0)    收藏  举报