美文网首页
Java 重载与重写相关问题

Java 重载与重写相关问题

作者: 07120665a058 | 来源:发表于2018-08-23 23:51 被阅读13次
    • 重写 与 重载的区别
    重写是:子类继承父类,重写父类的方法,要求方法名和参数列表都相同
    重载是:相同的方法名称,不同的方法签名(参数列表不同:包括个数/类型/顺序)返回类型不影响
    方法重载,在编译时确定调用哪个方法
    方法重写,在运行时确定调用的是子类还是父类的方法
    
    class OverloadingFixture{
        public String method(Object string){
            return "Object";
        }
        public String method(String string){
            return "String";
        } 
    }
    
    OverloadingFixture overloading = new OverloadingFixture();
    String actual = overloading.method((Object) "i am string");
    final String expected = "Object";
    assertEquals(expected, actual);
    
    • 重载方法的形参匹配规则优先级:
    基本类型:默认会自动从“短类型”扩展成“长类型”,如果没有精确匹配,优先匹配 存储长度 大于且最接近的
    引用类型:如果没有精确匹配,优先匹配 在继承树结构上,离实参类型最近的
    总结:当前类型(基本类型或引用类型 > 自动装箱拆箱 > 可变参数列表
    
    • 自动装箱拆箱
    自动装箱:Java自动将原始类型转换成对应的对象,比如:将int类型值转换成Integer对象
    自动拆箱:将对象转换为原始类型,比如:Integer对象转换成int类型值
    自动装箱时:编译器调用 valueOf 将原始类型值转换成对象
    自动拆箱时:编译器调用类似 intValue(), doubleValue() 这类方法将对象转换成原始类型值
    
    • 可变参数
    使用...表示可变长参数,比如:Object… 
    可变长参数必须是该方法的最后一个参数
    编译器在传递的时候,会将参数列表包裹成对象数组,如果本身已经是对象数组编译器就不会进行包裹
    
    • 参考文章

    类与接口(四)方法重载解析
    Java中的自动装箱与拆箱

    相关文章

      网友评论

          本文标题:Java 重载与重写相关问题

          本文链接:https://www.haomeiwen.com/subject/gresiftx.html