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

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

  • 相关阅读:
    从数据库表中查询日期最新的记录
    ArcGIS js api开发环境配置
    HRESULT:0x80070057 (E_INVALIDARG)
    ArcGIS js api三种查询功能
    sql设置字段默认值
    文件后缀与mime类型对应表
    关于dojo自定义类
    android用户登录验证
    java实现QQ互联登录
    springboot实现网站微信扫码登录
  • 原文地址:https://www.cnblogs.com/wangjiyuan/p/shenyongchongzai1.html
Copyright © 2011-2022 走看看