Java中的多态是面向对象编程中的一个重要特性,Java多态是指同一种方法在不同对象上的表现形式不同,这种特性使得代码更加灵活。在Java中,多态的实现方式有两种:方法重载和方法重写。
方法重载
方法重载指的是在同一个类中定义了多个名称相同但参数列表不同的方法。在调用这些方法时,编译器会根据传递的参数类型和数量来确定调用哪一个方法。
下面是一个方法重载的示例代码:
public class Calculator {
// 求和方法1:两个整数相加
public int add(int num1, int num2) {
return num1 + num2;
}
// 求和方法2:两个小数相加
public double add(double num1, double num2) {
return num1 + num2;
}
// 求和方法3:三个整数相加
public int add(int num1, int num2, int num3) {
return num1 + num2 + num3;
}
public static void main(String[] args) {
Calculator calculator = new Calculator();
System.out.println(calculator.add(1, 2)); // 输出:3
System.out.println(calculator.add(1.2, 2.3)); // 输出:3.5
System.out.println(calculator.add(1, 2, 3)); // 输出:6
}
}
在上面代码中,我们定义了一个Calculator类,包含了三个名称相同但参数列表不同的add方法。在我们调用add方法时,编译器会根据传递的参数类型和数量来确定调用哪一个方法。
方法重写
方法重写指的是子类定义了一个与父类名称、参数列表完全相同的方法,即覆盖了父类的方法。在调用这个方法时,会优先调用子类中定义的方法。这种情况下的多态性,属于继承多态。
下面是一个方法重写的示例代码:
// 父类
public class Animal {
public void makeSound() {
System.out.println("动物发出声音");
}
}
// 子类
public class Dog extends Animal {
// 重写父类的方法
public void makeSound() {
System.out.println("狗叫,汪汪汪");
}
public static void main(String[] args) {
Animal a = new Animal();
a.makeSound(); // 输出:动物发出声音
Dog d = new Dog();
d.makeSound(); // 输出:狗叫,汪汪汪
Animal ad = new Dog();
ad.makeSound(); // 输出:狗叫,汪汪汪
}
}
在上面的代码中,我们定义了一个Animal类和一个Dog类。Dog类重写了Animal类的makeSound()方法。在测试代码中,我们创建了一个Animal对象和一个Dog对象,并调用它们的makeSound()方法。此外,我们还创建了一个Animal类型的引用指向一个Dog对象,这里也体现了方法重写的多态性,调用的是Dog类重写的方法。
重写和重载的区别:
重写发生在父子类中,方法名称相同,参数列表相同,方法体不同,遵循"运行期"绑定,重写方法被调用时,看对象的类型.
重载发生在同一类中,方法名称相同,参数列表不同,方法体不同,遵循"编译期"绑定,看引用的类型.