java中如何实现多态
多态的概念
多态是面向对象编程的三大特性之一(封装、继承、多态),指同一操作作用于不同对象时会产生不同的行为。Java中多态主要通过方法重写(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");
}
}
class Cat extends Animal {
@Override
public void sound() {
System.out.println("Cat meows");
}
}
public class Main {
public static void main(String[] args) {
Animal myAnimal = new Dog(); // 父类引用指向子类对象
myAnimal.sound(); // 输出: Dog barks
myAnimal = new Cat();
myAnimal.sound(); // 输出: Cat meows
}
}
接口实现多态
通过接口和实现类体现多态:
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 shape = new Circle(); // 接口引用指向实现类对象
shape.draw(); // 输出: Drawing a circle
shape = new Square();
shape.draw(); // 输出: Drawing a square
}
}
多态的应用场景
- 方法参数多态:方法参数使用父类或接口类型,可接受任意子类或实现类对象。
public void makeSound(Animal animal) { animal.sound(); } - 集合类型多态:通过泛型集合存储不同子类对象。
List<Shape> shapes = new ArrayList<>(); shapes.add(new Circle()); shapes.add(new Square());
注意事项
- 编译时类型与运行时类型:编译时检查父类/接口的方法是否存在,运行时调用实际子类的方法。
- 无法调用子类特有方法:若需调用子类扩展的方法,需强制类型转换(需先通过
instanceof检查)。if (myAnimal instanceof Dog) { ((Dog) myAnimal).fetch(); // 调用Dog特有方法 }
通过合理使用多态,可以提高代码的扩展性和可维护性,降低模块间的耦合度。







