同一个方法调用,可以有不同的实现方式
同一个类中,方法名相同但参数列表不同(类型、个数或顺序)。编译时根据参数决定调用哪个方法。
public class Calculator {
// 方法名相同,参数不同
public int add(int a, int b) {
return a + b;
}
public double add(double a, double b) {
return a + b;
}
public int add(int a, int b, int c) {
return a + b + c;
}
}
// 使用
Calculator calc = new Calculator();
int sum1 = calc.add(1, 2); // 调用第一个
double sum2 = calc.add(1.5, 2.5); // 调用第二个
int sum3 = calc.add(1, 2, 3); // 调用第三个
子类重写父类方法,父类引用指向子类对象。运行时根据实际对象类型决定调用哪个方法。
// 父类引用指向子类对象(向上转型)
Animal animal1 = new Dog();
Animal animal2 = new Cat();
animal1.eat(); // 实际调用 Dog 的 eat()
animal2.eat(); // 实际调用 Cat 的 eat()
// 应用:多态数组
Animal[] animals = new Animal[3];
animals[0] = new Dog();
animals[1] = new Cat();
animals[2] = new Dog();
for (Animal animal : animals) {
animal.eat(); // 根据实际对象类型调用不同方法
}
1. 有继承关系(或实现接口)
2. 子类重写父类方法
3. 父类引用指向子类对象
class Animal {
void speak() {
System.out.print("Animal");
}
}
class Dog extends Animal {
@Override
void speak() {
System.out.print("Dog");
}
}
Animal a = new Dog();
a.speak();