亿迅智能制造网
工业4.0先进制造技术信息网站!
首页 | 制造技术 | 制造设备 | 工业物联网 | 工业材料 | 设备保养维修 | 工业编程 |
home  MfgRobots >> 亿迅智能制造网 >  >> Industrial programming >> java

Java 多态机制深度解析:虚方法、向上转型与动态分派

多态是面向对象三大特性之一,指同一操作作用于不同对象产生不同行为。Java 中通过向上转型(父类引用指向子类对象)和动态方法分派实现。

多态核心概念

引用赋值示例


interface Vegetarian {}
class Animal {}
class Deer extends Animal implements Vegetarian {}

Deer d = new Deer();
Animal a = d;           // 向上转型
Vegetarian v = d;       // 接口引用
Object o = d;           // 终极父类
// 所有引用指向同一堆对象

虚方法与动态分派

Java 非私有、非静态、非 final 实例方法均为虚方法。调用虚方法时,JVM 根据对象实际类型在运行期决定执行哪个实现(动态分派)。

经典案例:Employee 与 Salary


class Employee {
    void mailCheck() { System.out.println("Employee 邮寄支票"); }
}

class Salary extends Employee {
    double salary;
    @Override void mailCheck() { 
        System.out.println("Salary 邮寄支票,薪资: " + salary); 
    }
}

public class Demo {
    public static void main(String[] args) {
        Salary s = new Salary(); s.salary = 3600;
        Employee e = new Salary(); e.salary = 2400; // 向上转型
        
        s.mailCheck(); // 编译期/运行期均为 Salary.mailCheck
        e.mailCheck(); // 编译期 Employee.mailCheck,运行期 Salary.mailCheck
    }
}

输出:

Salary 邮寄支票,薪资: 3600.0
Salary 邮寄支票,薪资: 2400.0

多态的三个必要条件

  1. 继承/实现:子类 extends 父类或 implements 接口
  2. 重写:子类重写父类虚方法
  3. 向上转型:父类/接口引用指向子类对象

静态绑定 vs 动态绑定

绑定类型时机适用方法示例
静态绑定编译期private、static、final、构造器方法重载
动态绑定运行期普通实例方法(虚方法)方法重写

多态的实际价值

集合多态示例


List zoo = List.of(new Dog(), new Cat(), new Bird());
for (Animal a : zoo) a.makeSound(); // 各自发出不同声音

注意事项

  1. 字段不具备多态性:访问的是引用类型声明的字段(静态绑定)
  2. 静态方法不参与多态:属于类,非对象
  3. 私有方法不可见,子类定义同名方法属新方法非重写
  4. 构造器调用链中调用可重写方法有风险(子类字段未初始化)

java

  1. 精通 Java 运算符:类型、语法与实战示例
  2. Java 注释:类型、用法与最佳实践
  3. 精通 Java 增强 for 循环:语法、示例与最佳实践
  4. 精通 Java 字符串:创建、方法与最佳实践
  5. 精通 Java 接口:概念、实现与最佳实践
  6. 精通 Java 匿名内部类:定义、语法与实战示例
  7. 精通 Java Try-With-Resources:自动资源管理详解
  8. Java 注解详解:类型、放置位置与实战示例
  9. Java 断言实战指南:尽早发现 Bug 与保障代码可靠性
  10. 深入理解 Java Vector:用法、特性及与 ArrayList 的对比
  11. Java 多态机制深度解析:虚方法、向上转型与动态分派
  12. Java 封装机制:数据隐藏、访问控制与不变量保护