Java是根据参数类型和个数的不同实现重载。

  1.当参数类型是基本类型,但不完全匹配。

void test(int i) { }
void test(float f) { }

public static void main(String[] args) {
    byte b = 1;
    test(b);
}

  这种情况,会选择哪一个?

  以下分析基本数据类型之间的转换顺序:

public class test2 {

    public static void main(String[] args) {
        byte p1 = 1;
        char p2 = 1;
        short p3 = 1;
        int p4 = 1;
        long p5 = 1;
        float p6 = 1f;
        double p7 = 1d;

        param(p1);
        param(p2);
        param(p3);
        param(p4);
        param(p5);
        param(p6);
        param(p7);
    }
    public static void param(byte b) {
        System.out.println("byte");
    }
    public static void param(char b) {
        System.out.println("char");
    }
    public static void param(short b) {
        System.out.println("short");
    }
    public static void param(int b) {
        System.out.println("int");
    }
    public static void param(long b) {
        System.out.println("long");
    }
    public static void param(float b) {
        System.out.println("float");
    }
    public static void param(double b) {
        System.out.println("double");
    }
}

  通过注释param方法,如注释byte参数的那个方法,看byte参数用哪个param方法。可以发现如下规律:

  因此问题的答案是test(int i)。

  2.当参数是引用类型

public class test2 {

    public static void main(String[] args) {
        superClass s = new superClass();
        child c = new child();
        Object o = new Object();
        param(s);
        param(c);
        param(o);
    }

    public static void param(Object o) {
        System.out.println("object");
    }
    public static void param(superClass o) {
        System.out.println("superClass");
    }
    public static void param(child o) {
        System.out.println("child");
    }
}

class superClass {}

class child extends superClass {}

  还是用上面的注释法,发现规律如下:

  3.参数是包装类或可变参数

public class test2 {

    public static void main(String[] args) {
        int i = 10;
        param(i);
    }

    public static void param(Integer i) {
        System.out.println("Integer");
    }
    public static void param(int... i) {
        System.out.println("int...");
    }
    public static void param(long b) {
        System.out.println("long");
    }
    public static void param(float b) {
        System.out.println("float");
    }
    public static void param(Object o) {
        System.out.println("object");
    }
}

  发现规律如下:

  4.泛型

public class test2 {

    public static void main(String[] args) {
        test2 test = new test2();
        child c = new child();
        test.param(c);
    }
    public <T extends child> void param(T i) {
        System.out.println("<T extends child>");
    }
    public void param(superClass o) {
        System.out.println("superClass");
    }
    public <T> void param(T i) {
        System.out.println("<T>");
    }
}

  可以发现规律:

  总结:顺序为

  原因:越上面的出现在JDK时间越晚。

Java之方法重载(笔记)的更多相关文章

  1. Java之方法重载篇(我重载了,你要如何来调用我。。)

      一.课前引言 请看一下代码,你发现什么特殊之处了吗? public class MethodOverload { public static void main(String[] args) { ...

  2. Java基础-方法重载和方法重写的区别

    什么是java方法重载 (1) 方法重载是让类以统一的方式处理不同类型数据的一种手段.多个同名函数同时存在,具有不同的参数个数/类型. 重载Overloading是一个类中多态性的一种表现. (2)  ...

  3. java的方法重载

    1丶java的方法重载特性 满足以下条件的两个或多个方法构成“重载”关系:(1)方法名相同 (2)参数类型不同,参数个数不同或者参数类型的顺序不同 像System.out.println一样,就是重载 ...

  4. Java-Runoob-高级教程-实例-方法:01. Java 实例 – 方法重载

    ylbtech-Java-Runoob-高级教程-实例-方法:01. Java 实例 – 方法重载 1.返回顶部 1. Java 实例 - 方法重载  Java 实例 先来看下方法重载(Overloa ...

  5. Java 实例 - 方法重载

    先来看下方法重载(Overloading)的定义:如果有两个方法的方法名相同,但参数不一致,哪么可以说一个方法是另一个方法的重载. 具体说明如下: 方法名相同 方法的参数类型,个数顺序至少有一项不同 ...

  6. Java中方法重载

    方法重载:指在同一个类中,允许存在一个以上的同名方法,只要它们的参数列表不同即可,与修饰符和返回值类型无关. 参数列表:个数不同,数据类型不同,顺序不同. 重载方法调用:JVM通过方法的参数列表,调用 ...

  7. Java面向对象----方法重载

    方法重载(over load):方法名相同,参数列表不同,返回类型无关 package com.tanlei.newer; public class OverLoadDemo { public sta ...

  8. JAVA面向对象 - 方法重载与覆盖

    方法重载 方法重载就是在类的同种实现方式,到底采用哪种方式,取决与调用者给出的参数.方法重载特点是方法名相同,方法的参数类型,个数,顺序至少有一项不同,方法返回类型可以不同,方法的修饰符可以不同,只是 ...

  9. java作业-----方法重载

    满足方法重载的条件:1.方法名相同    2.参数类型不同,参数个数不同,参数类型的顺序不同. 同时,方法的返回值不作为方法重载的判断条件.

  10. 说出几条 Java 中方法重载的最佳实践?

    下面有几条可以遵循的方法重载的最佳实践来避免造成自动装箱的混乱. a)不要重载这样的方法:一个方法接收 int 参数,而另个方法接收 Integer 参 数. b)不要重载参数数量一致,而只是参数顺序 ...

随机推荐

  1. hdu1078 dp(递推)+搜索

    题目链接:http://acm.split.hdu.edu.cn/showproblem.php?pid=1078 题意:老鼠从(1.1)点出发,每次最多只能走K步,而且下一步走的位置的值必须必当前值 ...

  2. C# 词法分析器(四)构造 NFA

    系列导航 (一)词法分析介绍 (二)输入缓冲和代码定位 (三)正则表达式 (四)构造 NFA (五)转换 DFA (六)构造词法分析器 (七)总结 有了上一节中得到的正则表达式,那么就可以用来构造 N ...

  3. 修改WordPress中上传附件2M大小限制的方法/php+iis上传附件默认大小修改方法

    在服务器上架设好WordPress后,使用过程中发现,上传附件大小有2M的限制 话说服务器就是本机,可以直接把文件拖到附件存储文件夹下,然后在需要附件的地方引用链接 可是这种落后的方法终究不是办法,还 ...

  4. oracle存储海量数据 设计方案

    日历基本活动表的数据有四千万条,在这些生产库业务中是小的了. 从三个方面提高效率: 1.sql语句 要绑定变量,sql语句书写规范这些,包括的就多了.主要目的就是提高数据库吞吐量及业务SQL响应时间. ...

  5. PL/SQL 循环结构

    (1)LOOP...EXIT...END语句示例: control_var:; LOOP then EXIT; END IF; control_var:; END LOOP; 上述,初始化contro ...

  6. iOS学习10之OC类和对象

    本次是OC的第一节课,主要是学习和理解类与对象 1.面向对象 1> OOP(Object Oriented Programming)面向对象编程. 面向对象以事物为中心,完成某件事情都需要哪些事 ...

  7. BZOJ3564 : [SHOI2014]信号增幅仪

    先把所有点绕原点逆时针旋转(360-a)度,再把所有点横坐标除以放大倍数p,最后用随机增量法求最小圆覆盖即可. 时间复杂度期望$O(n)$ #include<cstdio> #includ ...

  8. 拓展企业VR培训业务,这家VR训练公司StriVR完成500万美元融资!

    虚拟现实初创公司StriVR最近发布了新的企业VR训练产品项目,并宣布在刚刚结束的首轮融资中获得500万美元投资.由Signia Venture Partners领投,宝马i Venturesi.Ad ...

  9. BZOJ 2957 & 线段树上的查询

    题意: 小A的楼房外有一大片施工工地,工地上有N栋待建的楼房.每天,这片工地上的房子拆了又建.建了又拆.他经常无聊地看着窗外发呆,数自己能够看到多少栋房子. 为了简化问题,我们考虑这些事件发生在一个二 ...

  10. 测试Centos硬盘读写速度

    yum install hdparm 参数:  -a<快取分区>   设定读取文件时,预先存入块区的分区数,若不加上<快取分区>选项,则显示目前的设定.  -A<0或1& ...