在面向对象编程中,Java多态是一项强大的特性,它能够提高代码的灵活性和可扩展性。
Java多态是指同一种类型的对象,在不同的情况下可以表现出不同的行为。它实现了面向对象编程的核心原则之一,通过多态,我们可以编写更灵活、可扩展的代码。
编译时多态是指在同一个类中定义多个同名的方法,但参数类型或个数不同,编译器在编译时根据调用方法实际参数的类型和个数来决定调用哪一个方法。
示例:
public class Calculator {
//计算两个整型和
public int add(int num1, int num2) {
return num1 + num2;
}
//计算双精度浮点数和
public int add(double num1, double num2) {
return num1 + num2;
}
//计算三个值的和
public int add(int num1, int num2,int num3) {
return num1 + num2 + num3;
}
}
在上述示例中,Calculator类中定义了三个同名的add方法,一个接收整型参数,另一个接收浮点型参数,一个接收三个整型参数。编译器会根据调用时实际参数的类型选择调用适合的方法。
运行时多态是指子类可以重写父类中的方法,使得同一个方法可以在不同的子类对象中表现出不同的行为,在运行时,根据对象的实际类型来调用相应的方法。
public class Animal {
public void makeSound() {
System.out.println("动物的声音");
}
}
public class Dog extends Animal {
@Override
public void makeSound() {
System.out.println("汪汪~");
}
}
public class Cat extends Animal {
@Override
public void makeSound() {
System.out.println("喵~");
}
}
在上述示例中,Animal类是父类,Dog和Cat类是其子类。它们都重写了父类的makeSound方法,但实现不同的行为。通过多态,我们可以在运行时根据不同的对象类型调用相应的makeSound方法。
1. 接口和抽象类:
多态在接口和抽象类的使用中非常常见。通过接口或抽象类定义共同的行为,然后由具体的实现类来实现这些行为。通过多态,我们可以将不同的实现类赋值给接口或抽象类类型的引用,从而实现代码的灵活性和可扩展性。
2. 方法的参数和返回值:
多态还可以应用于方法的参数和返回值类型。通过将参数和返回值类型声明为父类或接口类型,可以接受或返回不同子类对象,从而实现更灵活的方法调用。
示例
// 定义一个抽象类Animal
public abstract class Animal {
public abstract void makeSound();
}
// 定义具体的子类实现Animal
public class Dog extends Animal {
@Override
public void makeSound() {
System.out.println("汪汪~");
}
}
public class Cat extends Animal {
@Override
public void makeSound() {
System.out.println("喵~");
}
}
// 定义一个类,包含一个方法,接收Animal类型的参数并返回Animal类型的对象
class AnimalSoundPlayer {
public Animal playSound(Animal animal) {//方法参数和返回值都为Animal
animal.makeSound();
return animal;
}
}
//测试
public class Main {
public static void main(String[] args) {
AnimalSoundPlayer player = new AnimalSoundPlayer();
Animal dog = new Dog();
Animal cat = new Cat();
player.playSound(dog); // 输出: 汪汪~
player.playSound(cat); // 输出: 喵~
}
}
因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- igbc.cn 版权所有 湘ICP备2023023988号-5
违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务