zoukankan      html  css  js  c++  java
  • 静态类型与函数重载

    静态类型与函数重载


    有以下代码:

    public class Main {
        public static class Human {}
    
        public static class Man extends Human {}
    
        public static class Woman extends Human {}
    
        public static void sayHello(Human human) { System.out.println("human"); }
    
        public static void sayHello(Man man) { System.out.println("man"); }
    
        public static void sayHello(Woman woman) { System.out.println("woman"); }
    
        public static void main(String[] args) {
            Human human;
    
            human = new Human();
            Main.sayHello(human);
    
            human = new Man();
            Main.sayHello(human);
    
            human = new Woman();
            Main.sayHello(human);
        }
    }
    

    上述代码执行完毕后控制台的输出结果为:

    human
    human
    human
    

    静态类型、实际类型

    Human human = new Woman();
    

    上面代码中的“Human”被称为变量human的静态类型(Static Type),或者称作外观类型(Apparent Type),上面代码中的“Woman”被称为变量human的实际类型(Actual Type)

    两种类型的区别

    静态类型和实际类型在程序中可以发生变化,但是静态类型的变化仅仅在使用时发生,变量本身的静态类型不会被改变,并且静态类型是编译期可知的;而实际类型变化的结果在运行期才能确定,编译器在编译程序的时候并不知道一个对象的实际类型是什么

    public static void main(String[] args) {
        // 静态类型:编译期可知
        Human human;
        // 实际类型:运行期可知
        human = new Human();
        Main.sayHello(human);
    
        // 实际类型变化
        human = new Man();
        // 静态类型变化
        Main.sayHello((Man) human);
    
        // 实际类型变化
        human = new Woman();
        // 静态类型变化
        Main.sayHello((Woman) human);
    }
    
    human
    man
    woman
    

    静态类型与方法重载

    1. 重载方法以参数列表(参数个数、参数类型)为区分依据。
    2. 编译期仅仅可知变量的静态类型,无法确定变量的实际类型。

    综上,在编译阶段编译器根据参数的静态类型来决定最终执行方法的哪个重载版本

  • 相关阅读:
    android 自定义动画4 RotateAnimation源码分析
    Android 绘图 阴影制作(Shadow)
    view, surfaceView, invalidate, postInvalidate, 刷新屏幕
    android database 常用字段描述
    Android标题栏进度指示器使用
    ThumbnailUtils Android2.2新增类
    Android 重力感应 测试代码
    Android中内嵌字体实现个性化
    Android中悬浮窗口
    Android布局Java代码构造法
  • 原文地址:https://www.cnblogs.com/XiaoZhengYu/p/13278628.html
Copyright © 2011-2022 走看看