• 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. 依据调用者的实际类型;

  • 相关阅读:
    nightwatchjs --Expect element to not include text
    Iterating elements using NightWatchJS
    nightwatch 切换窗口
    nodejs读取配置文件
    spring 事务
    重载,重写,重构
    python 元组不变 列表可变
    WebStorm ES6 语法支持设置
    docker日志
    curl -O 下载文件
  • 原文地址:https://www.cnblogs.com/naray/p/13177262.html
Copyright © 2020-2023  润新知