zoukankan      html  css  js  c++  java
  • overload和overridden

    今天看的书是effective java,被其中的一个小问题困惑了好久,细细得读完几遍,终于明白是什么意思。测试代码如下

     1 package test.lan;
     2 
     3 import java.math.BigInteger;
     4 import java.util.ArrayList;
     5 import java.util.Collection;
     6 import java.util.HashMap;
     7 import java.util.HashSet;
     8 import java.util.List;
     9 import java.util.Set;
    10 public class ff {
    11     public static String classify(Set<?> s){
    12         return "Set";
    13     }
    14     public static String classify(List<?> lst){
    15         return "List";
    16     }
    17     public static String classify(Collection<?> c){
    18         return "Unknown Collection";
    19     }
    20     public static void main(String[] args) {
    21         Collection<?>[] collections = {
    22                 new HashSet<String>(),
    23                 new ArrayList<BigInteger>(),
    24                 new HashMap<String,String>().values()
    25         };
    26         for (Collection<?> c:collections) {
    27             System.out.println(classify(c));
    28         }
    29         System.out.println(classify(new HashSet<String>()));
    30     }
    31 }


      咋一看,我也以为我会输出三个不同的字符串,看了解释还是迷迷糊糊,不过最后还是被我搞清楚了原因。

      overload即重载,是静态多样性的体现,具体表现在方法被重载了,要调用哪个方法,在编译的时候就已经确定了(取决于句柄);而overridden是指动态重写(覆盖),要调用哪个方法,是在运行时确定的,选择的依据是被调用的方法所在对象的运行时类型,也就是句柄所指向的对象类型来确定的。

      因此,比较保守的做法是不重载相同参数个数的方法,而采用诸如不同的参数个数的方法,或者是静态工厂类。

  • 相关阅读:
    纸上谈兵:最短路径与贪婪算法
    “不给力啊,老湿!”:RSA加密与破解
    纸上谈兵:拓扑排序
    Homebrew 安装使用
    Servlet详解
    搭建SpringMVC
    设置IDEA智能感知支持Jsp内置对象
    素材网站
    常用单词
    常见异常
  • 原文地址:https://www.cnblogs.com/azul0906/p/4209629.html
Copyright © 2011-2022 走看看