java如何实现多态
多态的概念
多态是面向对象编程的三大特性之一(封装、继承、多态),指同一操作作用于不同对象时,可以产生不同的行为。Java中多态主要通过方法重写(Override)和接口/抽象类实现。

实现多态的条件
- 继承或实现关系:子类继承父类,或类实现接口。
- 方法重写:子类重写父类或接口中的方法。
- 向上转型:父类引用指向子类对象(如
Parent obj = new Child())。
实现方式
方法重写(Override)
子类重写父类方法,通过父类引用调用时实际执行子类逻辑。

class Animal {
void sound() {
System.out.println("Animal makes sound");
}
}
class Dog extends Animal {
@Override
void sound() {
System.out.println("Dog barks");
}
}
public class Main {
public static void main(String[] args) {
Animal myDog = new Dog(); // 向上转型
myDog.sound(); // 输出: Dog barks
}
}
接口多态
通过接口定义方法,不同实现类提供不同行为。
interface Shape {
void draw();
}
class Circle implements Shape {
@Override
public void draw() {
System.out.println("Drawing a circle");
}
}
class Square implements Shape {
@Override
public void draw() {
System.out.println("Drawing a square");
}
}
public class Main {
public static void main(String[] args) {
Shape shape1 = new Circle();
Shape shape2 = new Square();
shape1.draw(); // 输出: Drawing a circle
shape2.draw(); // 输出: Drawing a square
}
}
抽象类多态
抽象类定义抽象方法,子类实现具体逻辑。
abstract class Vehicle {
abstract void run();
}
class Car extends Vehicle {
@Override
void run() {
System.out.println("Car drives on road");
}
}
class Boat extends Vehicle {
@Override
void run() {
System.out.println("Boat sails on water");
}
}
public class Main {
public static void main(String[] args) {
Vehicle vehicle1 = new Car();
Vehicle vehicle2 = new Boat();
vehicle1.run(); // 输出: Car drives on road
vehicle2.run(); // 输出: Boat sails on water
}
}
多态的应用场景
- 统一接口调用:如集合框架中的
List list = new ArrayList()或List list = new LinkedList()。 - 扩展性:新增子类无需修改父类代码。
- 设计模式:如策略模式、工厂模式等。
注意事项
- 编译时类型与运行时类型:编译时检查父类方法是否存在,运行时调用子类方法。
- 无法调用子类特有方法:需通过强制转型(如
((Dog)myDog).fetch())。 - 静态方法不参与多态:静态方法绑定在编译时完成。
通过合理使用多态,可以显著提升代码的灵活性和可维护性。






