如何实现Java多态?
允许不同类的对象对同一消息作出不同的响应
同一个行为具有多个不同表现形式的能力
实现方式:
- 编译时多态(静态多态):主要通过方法重载(Overloading)来实现。
- 方法重载是指在同一个类中,定义多个同名但参数列表不同的方法。
- 在编译时,根据参数的不同,编译器会确定调用哪个具体的方法。
package JavaConcept;
class Calculator {
// 接受不同类型或数量的参数
// 重载的加法方法,接受两个整数参数
public int add(int num1, int num2) {
return num1 + num2;
}
// 重载的加法方法,接受两个浮点数参数
public double add(double num1, double num2) {
return num1 + num2;
}
// 重载的加法方法,接受三个整数参数
public int add(int num1, int num2, int num3) {
return num1 + num2 + num3;
}
}
public class OverloadingExample {
public static void main(String[] args) {
Calculator calculator = new Calculator();
// 根据传入的参数不同,会调用相应的add方法,从而实现了多态的效果
int result1 = calculator.add(5, 10);
System.out.println("Result 1: " + result1);
double result2 = calculator.add(5.5, 10.5);
System.out.println("Result 2: " + result2);
int result3 = calculator.add(5, 10, 15);
System.out.println("Result 3: " + result3);
}
}
- 运行时多态(动态多态):主要通过方法重写(Overriding)来实现。
- 方法重写是指子类重新定义父类中已有的方法。
- 当通过子类对象调用该方法时,实际执行的是子类中重写后的方法,而不是父类中的方法。
- 这就实现了在运行时根据对象的实际类型来决定调用哪个方法的多态行为。
package JavaConcept;
// 运行时多态:通过重写实现
public class Animal1 {
public void makeSoud(){
System.out.println("动物发出声音");
}
}
// 子类重写父类的方法
//Dog和Cat类都继承自Animal类,并重写了makeSound方法
class Dog extends Animal1{
@Override
public void makeSoud() {
System.out.println("狗叫");
}
}
class Cat extends Animal1{
@Override
public void makeSoud() {
System.out.println("猫叫");
}
}
package JavaConcept;
public class PolymorphismExample {
public static void main(String[] args) {
// 创建了Dog和Cat对象,并将它们向上转型为Animal类型
Animal1 animal1 = new Dog();
Animal1 animal2 = new Cat();
// 调用Animal1类型的makeSoud()方法
// 这个方法在Dog和Cat类中都有重写,所以会调用Dog或Cat类中的makeSoud()方法
// 实际执行的是子类中重写后的方法,多态
animal1.makeSoud();
animal2.makeSoud();
}
}