问题:
面经遇到了多态的类型。
1.编译时多态(重载)
2.运行时多态(重写)
实践:
1.编译时多态(静态多态)
- 编译时多态也成为静态绑定或早期绑定,它在编译阶段就确定了要调用的方法。
- 最常见的形式就是方法重载
- 方法重载:
- 在同一个类中, 允许多个方法具有想通过的名字
- 但参数列表不同(参数的类型、数量或顺序不同)
- 编译器会根据调用时的传递参数来决定调用哪个方法。
- 方法重载:
class Example {
void display(int a) {
System.out.println("Integer: " + a);
}
void display(String a) {
System.out.println("String: " + a);
}
}
public class Main {
public static void main(String[] args) {
Example obj = new Example();
obj.display(10); // 调用 display(int a)
obj.display("Hello"); // 调用 display(String a)
}
}
2.运行时多态
- 运行时多态也称动态绑定后晚期绑定,它在程序运行时才确定要调用的方法。
- 最常见的就是方法重写
- 方法重写
- 子类可以重写父类中方法,提供自己的实现。
- 当通过父类引用调用该方法,实际操作执行的是子类重写的方法。
- 方法重写
class Animal {
void sound() {
System.out.println("Anima");
}
}
class Dog extends Animal {
@Override
void sound() {
System.out.println("Dog");
}
}
class Cat extends Animal {
@Override
void sound() {
System.out.println("Cat");
}
}
public class Main {
public static void main(String[] args) {
Animal myAnimal = new Dog(); // 父类引用指向子类对象
myAnimal.sound();
myAnimal = new Cat(); // 父类引用指向另一个子类对象
myAnimal.sound();
}
}