.java如何实现多态
多态的基本概念
多态是面向对象编程的三大特性之一,允许不同类的对象对同一消息做出响应。Java中多态主要通过继承和接口实现,分为编译时多态(方法重载)和运行时多态(方法重写)。
方法重载实现编译时多态
在同一个类中定义多个同名方法,但参数列表不同(参数类型、数量或顺序)。编译器根据调用时的参数决定具体调用哪个方法。
class Calculator {
int add(int a, int b) {
return a + b;
}
double add(double a, double b) {
return a + b;
}
}
方法重写实现运行时多态
子类继承父类并重写其方法。通过父类引用指向子类对象,调用方法时会根据实际对象类型决定执行哪个版本的方法。
class Animal {
void makeSound() {
System.out.println("Animal sound");
}
}
class Dog extends Animal {
@Override
void makeSound() {
System.out.println("Bark");
}
}
// 使用示例
Animal myAnimal = new Dog();
myAnimal.makeSound(); // 输出"Bark"
接口实现多态
定义接口并由不同类实现,通过接口引用调用实现类的方法。这种方式更灵活,支持多重继承。

interface Shape {
void draw();
}
class Circle implements Shape {
@Override
public void draw() {
System.out.println("Drawing circle");
}
}
class Square implements Shape {
@Override
public void draw() {
System.out.println("Drawing square");
}
}
// 使用示例
Shape shape = new Circle();
shape.draw(); // 输出"Drawing circle"
多态的应用场景
- 方法参数多态:将父类或接口类型作为方法参数,可接受任何子类或实现类对象。
- 集合框架多态:使用List接口引用指向ArrayList或LinkedList实例。
- 回调机制:通过接口实现回调函数,不同实现类提供不同行为。
注意事项
- 属性没有多态性:访问成员变量时,取决于引用类型而非实际对象类型。
- 静态方法没有多态性:静态方法调用由编译时类型决定。
- 私有方法和final方法不能被重写。
- 构造方法不能被重写,但可以通过super调用父类构造方法。






