Java 方法分派

1. 什么是方法分派?

  就是确定调用谁的,哪个方法。

  在Java中子类覆写父类方法的方法都是虚方法,使用final、private修饰的方法不是虚方法。

2. 方法分派情况分析

  在Java中子类继承父类并覆写父类方法,在调用时取决于运行时的实际类型

// 父类
public class SuperClass {

    public String getName() {
        return "super";
    }

}

// 子类
public class SubClass extends SuperClass {

    @Override
    public String getName() {
        return "sub";
    }

}

// 实现
public class LearnJava {

    public static void main(String[] args) {
        SuperClass superClass = new SubClass();
        printClass(superClass);
    }

    public static void printClass(SuperClass superClass) {
        System.out.println("super class: " + superClass.getName());
    }

    public static void printClass(SubClass subClass) {
        System.out.println("sub class: " + subClass.getName());
    }

}

  输出:

super class: sub

  调用过程是怎么样的?

  在编译时期需要确定方法的调用,在main()函数中在编译时确认调用printClass(SuperClass superClass)方法,在printClass(SuperClass superClass)方法中调用哪个getName()方法,是父类的还是子类的,取决于运行时实际类型。所以,在main中调用printClass(SuperClass superClass),在printClass(SuperClass superClass)方法中superClass实际类型是SubClass,所以调用SubClass类实例的getName()方法。

3. 方法分派总结 

  1. 静态分派 -- 方法重载分派

    1. 编译时;

    2. 依据调用者的声明类型与方法参数类型;

  2. 动态分派 -- 方法覆写分派

    1. 运行时;

    2. 依据调用者的实际类型;

 

posted @ 2021-08-20 16:34  naray  阅读(120)  评论(0编辑  收藏  举报