参数多态

同一段代码处理多种数据类型

// 参数多态示例 - 泛型类
class Box<T> {
    private T content;
    
    public void setContent(T content) {
        this.content = content;
    }
    
    public T getContent() {
        return content;
    }
}

// 使用
Box<String> stringBox = new Box<>();
stringBox.setContent("Hello");
Box<Integer> intBox = new Box<>();
intBox.setContent(123);

包含多态

通过继承和接口,子类对象当作父类对象使用。

// 包含多态示例
class Animal {
    void makeSound() {
        System.out.println("Some sound");
    }
}

class Dog extends Animal {
    @Override
    void makeSound() {
        System.out.println("Bark");
    }
}

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

// 使用
Animal myAnimal = new Dog(); // Dog对象被当作Animal使用
myAnimal.makeSound(); // 输出"Bark"

过载多态(重载)

// 过载多态示例 - 方法重载
class Calculator {
    int add(int a, int b) {
        return a + b;
    }
    
    double add(double a, double b) {
        return a + b;
    }
    
    String add(String a, String b) {
        return a + b;
    }
}

// 使用
Calculator calc = new Calculator();
System.out.println(calc.add(2, 3));       // 调用int版本
System.out.println(calc.add(2.5, 3.5));   // 调用double版本
System.out.println(calc.add("Hello", "World")); // 调用String版本

强制多态

// 强制多态示例 - 类型自动转换
int num = 5;
double d = num; // int自动转换为double

String str = "Number: " + 123; // int自动转换为String

// 方法调用时的自动装箱
List<Integer> list = new ArrayList<>();
list.add(1); // 基本类型int自动装箱为Integer