Java的多态
多态是面向对象编程的三大特性之一(封装、继承、多态),指同一行为具有多种不同表现形式。在Java中,多态允许父类引用指向子类对象,并通过重写(Override)实现不同子类的差异化行为。
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(); } }接口多态
接口定义方法规范,不同实现类提供具体实现。通过接口引用调用方法时,实际执行的是实现类的逻辑。interface Shape { void draw(); } class Circle implements Shape { @Override public void draw() { System.out.println("Drawing a circle"); } } public class Main { public static void main(String[] args) { Shape shape = new Circle(); shape.draw(); } }方法重载(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(1, 2)); System.out.println(calc.add(1.5, 2.5)); } }
多态的应用场景
- 代码扩展性:新增子类无需修改父类逻辑。
- 解耦:通过接口或父类引用调用方法,降低模块依赖性。
- 统一处理:例如集合中存储不同子类对象,通过循环调用同一方法。
注意事项
- 编译时与运行时类型:编译时检查父类/接口是否有方法定义,运行时执行子类方法。
- 无法调用子类特有方法:父类引用需强制转型为子类类型后才能调用子类扩展的方法。
final方法不可重写:标记为final的方法无法被子类修改。
