java 如何实现多态
多态的基本概念
多态是面向对象编程的三大特性之一(封装、继承、多态),指同一操作作用于不同对象时产生不同的行为。Java中多态主要通过方法重写(Override)和接口实现体现,依赖继承或接口关系实现运行时动态绑定。

实现多态的两种方式
1. 基于继承的方法重写
子类继承父类并重写父类方法,通过父类引用指向子类对象实现多态。

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 myAnimal = new Dog(); // 父类引用指向子类对象
myAnimal.sound(); // 输出: Dog barks
}
}
2. 基于接口的实现
通过接口定义方法,不同类实现同一接口并重写方法,实现多态。
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
}
}
多态的关键机制
- 动态绑定(运行时绑定):Java在运行时根据对象的实际类型决定调用哪个方法,而非编译时的引用类型。
- 向上转型(Upcasting):父类引用指向子类对象(如
Animal myAnimal = new Dog()),这是多态的前提。
注意事项
- 方法重写的规则:子类方法需与父类方法同名、同参数列表、相同或更宽松的访问权限,且返回类型兼容。
- 无法多态的场景:静态方法(static)、私有方法(private)、final方法及字段(成员变量)不参与多态。
通过合理使用继承和接口,结合方法重写,可以灵活实现多态,提升代码的可扩展性和复用性。






