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 myDog = new Dog(); // 父类引用指向子类对象
myDog.sound(); // 输出: Dog barks
}
}
接口实现
通过接口定义方法,由不同类实现同一接口的方法。
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
}
}
抽象类与抽象方法
抽象类可以定义抽象方法,强制子类实现具体逻辑。
abstract class Vehicle {
abstract void run();
}
class Car extends Vehicle {
@Override
void run() {
System.out.println("Car drives 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 drives on road
vehicle2.run(); // 输出: Boat sails on water
}
}
多态的应用场景
- 动态绑定:运行时确定调用的方法(如上述示例)。
- 集合中的多态:使用父类类型存储不同子类对象。
List<Animal> animals = new ArrayList<>(); animals.add(new Dog()); animals.add(new Cat()); for (Animal animal : animals) { animal.sound(); // 根据实际对象调用方法 }
注意事项
- 多态仅适用于方法,不适用于成员变量(变量调用看引用类型)。
- 若需调用子类特有方法,需进行向下转型(如
((Dog)myDog).fetch())。







