如何实现java多态
理解多态的概念
多态是面向对象编程的三大特性之一,允许不同类的对象对同一消息做出响应。Java中多态主要通过方法重写(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 myAnimal = new Dog(); // 父类引用指向子类对象
myAnimal.sound(); // 输出: Dog barks
}
}
关键点:
- 子类重写父类方法(
@Override注解可选但推荐)。 - 通过父类引用调用方法时,实际执行子类重写后的方法。
实现编译时多态
编译时多态通过方法重载(Overload)实现,同一类中多个同名方法参数不同:
class Calculator {
int add(int a, int b) {
return a + b;
}
double add(double a, double b) {
return a + b;
}
}
public class Main {
public static void main(String[] args) {
Calculator calc = new Calculator();
System.out.println(calc.add(2, 3)); // 调用int版本
System.out.println(calc.add(2.5, 3.5)); // 调用double版本
}
}
关键点:
- 方法名相同,参数类型或数量不同。
- 编译器根据参数决定调用哪个方法。
接口与多态
接口的多态性通过实现类体现,一个接口可以被多个类实现,调用时根据具体实现类决定行为:
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");
}
}
public class Main {
public static void main(String[] args) {
Shape shape1 = new Circle();
Shape shape2 = new Square();
shape1.draw(); // 输出: Drawing Circle
shape2.draw(); // 输出: Drawing Square
}
}
注意事项
- 向上转型:父类引用指向子类对象是安全的,但只能调用父类声明的方法。
- 向下转型:需通过
instanceof检查避免ClassCastException。 - 抽象类与多态:抽象方法必须在子类中实现,进一步支持多态。
通过结合继承、接口和方法重写,Java多态能够灵活扩展代码,降低耦合度。







