java中什么是多态性?在Java中,多态性(Polymorphism)是指一个对象可以具有多个不同的类型,并且可以根据当前使用的上下文自动选择正确的行为。
多态性有两种形式:编译时多态性(静态多态性)和运行时多态性(动态多态性)。
1. 编译时多态性:也称为静态多态性,指的是在编译时根据变量的声明类型来确定调用哪个方法。这种多态性实现了方法的重载(Overloading),即同一个类中有多个同名但参数列表不同的方法,编译器会根据方法的参数类型选择最匹配的方法。
2. 运行时多态性:也称为动态多态性,指的是在运行时根据实际对象的类型来确定调用哪个方法。这种多态性实现了方法的重写(Overriding),即子类重写父类的方法,当使用父类引用指向子类对象时,调用的方法将根据对象的实际类型来确定。
多态性的优势在于增加代码的灵活性和可扩展性。通过多态性,我们可以编写通用的代码,处理不同类型的对象,而不需要针对每种类型编写特定的代码。这使得代码更具可维护性,同时也提高了代码的可复用性和可扩展性。
下面是一个简单的示例,演示了多态性的用法:
```java
class Animal {
void makeSound() {
System.out.println("动物发出声音");
}
}
class Dog extends Animal {
@Override
void makeSound()
{
System.out.println("狗发出汪汪声");
}
}
class Cat extends Animal {
@Override
void makeSound()
{
System.out.println("猫发出喵喵声");
}
}
public class Main {
public static void main(String[] args)
{
Animal animal1 = new Dog();
Animal animal2 = new
Cat();
animal1.makeSound(); // 调用狗类的makeSound方法
animal2.makeSound(); // 调用猫类的makeSound方法
}
}
```
在上面的示例中,`Animal`类是一个基类,`Dog`和`Cat`类是其子类。在`Main`类中,我们创建了一个`Animal`类型的引用变量`animal1`和`animal2`,分别指向一个`Dog`对象和一个`Cat`对象。通过调用`makeSound`方法,尽管引用变量的类型是`Animal`,但实际上会根据对象的实际类型调用相应的重写方法,实现了运行时多态性。因此,输出结果会分别显示狗发出汪汪声和猫发出喵喵声。