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"
}
}
多态的条件
- 继承或实现:必须有父子类继承关系或接口实现。
- 方法重写:子类需重写父类或接口的方法。
- 向上转型:父类引用指向子类对象(如
Animal a = new Dog())。
多态的应用场景
- 代码扩展性:新增子类无需修改父类逻辑。
- 统一接口调用:如集合框架中的
List list = new ArrayList()或List list = new LinkedList()。 - 设计模式:工厂模式、策略模式等均依赖多态特性。
注意事项
- 编译时类型与运行时类型:编译时检查父类方法是否存在,运行时调用子类方法。
- 无法调用子类特有方法:需通过强制类型转换(如
((Dog)myAnimal).fetch())。 - 静态方法不支持多态:静态方法属于类,不参与重写。






