java如何实现多态
多态的概念
多态是面向对象编程的三大特性之一(封装、继承、多态),指同一操作作用于不同对象时,可以产生不同的行为。Java中主要通过方法重写(Override)和接口/抽象类实现多态。
实现多态的三种方式
方法重写(Override)
子类继承父类并重写父类的方法,通过父类引用调用子类对象时,实际执行的是子类的方法。
class Animal {
public void sound() {
System.out.println("Animal makes sound");
}
}
class Dog extends Animal {
@Override
public 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 runs 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 runs on road"
vehicle2.run(); // 输出 "Boat sails on water"
}
}
多态的核心条件
- 继承或实现关系:子类继承父类或实现接口。
- 方法重写:子类必须重写父类或接口的方法。
- 向上转型:父类引用指向子类对象(如
Animal myDog = new Dog())。
多态的应用场景
- 方法参数或返回值类型为父类/接口,实际传入或返回子类对象。
- 集合中存储同一父类的不同子类对象(如
List<Animal>包含Dog和Cat)。 - 框架设计(如Spring的依赖注入通过接口解耦具体实现)。
通过合理使用多态,可以提高代码的扩展性和可维护性。







