zoukankan      html  css  js  c++  java
  • 慎用重载_1

    对象的运行时类型并不影响“哪个重载版本将被执行”;选择工作是在编译时候进行的,完全基于参数的编译时类型。

    看个例子先:

    package com.wjy.multithread;
    
    public class MainTest {
        
        public static void show(int a){
            System.out.println("Integer");
        }
        
        public static void show(double a){
            System.out.println("Double");
        }
        
        public static void show(Object a){
            System.out.println("Object");
        }
        public static void main(String args[]){
            Object arr[]={2,22,2.5};
            for(Object object : arr){
                show(object);
            }
        }
    }

    大家猜猜结果,可能认为首先会输出Integer,但实际上结果是:

    Object
    Object
    Object

    对,你没看错,输出了三遍Object.神马情况? 你可能认为show方法会自动识别元素类型,调用合适的重载方法。但实际上却不是,编译的时候决定的类型会发挥作用,无论运行时是什么类型都无所谓,编译时已经定了。无语吧。方法的重载机制是不完美的。他并没有提供这一功能。

    //*********************************************************************************************************************

    但是来看看类之间的覆盖例子:

    package com.wjy.multithread;
    
    public class GrandFather {
        public void show(){
            System.out.println("GrandFather");
        }
    }
    package com.wjy.multithread;
    
    public class Father extends GrandFather {
        @Override
        public void show(){
            System.out.println("Father");
        }
    }
    package com.wjy.multithread;
    
    public class Son extends Father{
        @Override
        public void show(){
            System.out.println("Son");
        }
    }

    测试代码:

    package com.wjy.multithread;
    
    public class MainTest {
        public static void main(String args[]){
            GrandFather arr2[]={new GrandFather(),new Father(),new Son()};
            for(GrandFather grandFather : arr2){
                grandFather.show();
            }
        }
    }

    正如你所料,结果是:

    GrandFather
    Father
    Son

    这才是我们想要的答案,可见方法重载机制并没有覆盖机制的这些优势。所以,慎用重载。

  • 相关阅读:
    如何使用wei-ui框架,wei-ui框架有哪些组件
    微信小程序tabbar如何配置
    如何使用promise封装wx.request()、
    微信有哪些小程序内置组件,目录结构
    uni-app生命周期
    vue任意关系组件通信与跨组件监听状态 vue-communication
    vue父子组件状态同步的最佳方式续章(v-model篇)
    webstorm中emmet展开a标签和行内元素不换行的解决办法
    深入理解 vue 中 scoped 样式作用域的规则
    javascript事件环微任务和宏任务队列原理
  • 原文地址:https://www.cnblogs.com/wangjiyuan/p/shenyongchongzai1.html
Copyright © 2011-2022 走看看