Java 多态性是面向对象编程的一个重要概念。多态性是指一个接口(如方法)可以有多个不同实现。具体来说,多态性意味着同一个方法或接口可以在不同类型的对象上执行,并获得不同类型的结果。
在 Java 中,多态性可以通过以下几种方式实现:
1. 方法重载(Method Overloading):在一个类中,方法名相同,但参数类型或数量不同的方法称为重载方法。编译器根据调用方法的参数类型和数量自动选择合适的方法进行调用。这是一种编译时多态性。
2. 方法重写(Method Overriding):在子类中定义一个与父类方法签名相同(方法名、参数类型和数量)的方法称为重写。在子类实例中调用这个方法时,将执行子类中的实现,而不是父类中的实现。这是一种运行时多态性。
注:此处不详细介绍重载与重写,上篇有介绍,想看的小伙伴可以进主页查看。
3. 接口实现(Interface Implementation):一个接口可以定义多个实现类,每个实现类都可以根据需要实现接口中的方法。这使得接口具有多态性,可以用一个接口类型引用不同的实现类实例:
public interface Vehicle {
void drive();
}
public class Car implements Vehicle {
public void drive() {
System.out.println("开车");
}
}
public class Bicycle implements Vehicle {
public void drive() {
System.out.println("骑自行车");
}
}
4. 抽象类和抽象方法:抽象类可以包含抽象方法,抽象方法没有方法体,只需声明方法签名。子类必须实现抽象类中的所有抽象方法,这使得抽象类具有多态性。
例子:
public abstract class Shape {
public abstract double area();
}
public class Circle extends Shape {
private double radius;
public Circle(double radius) {
this.radius = radius;
}
public double area() {
return Math.PI * radius * radius;
}
}
public class Rectangle extends Shape {
private double width;
private double height;
public Rectangle(double width, double height) {
this.width = width;
this.height = height;
}
public double area() {
return width * height;
}
}
通过这些方法,Java 多态性允许在不改变代码整体结构的情况下,引入新类型或者修改已有类型,使得代码更加灵活和可维护。