重载误区!!!可以不在一个类中!!!

Posted 小写丶H

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了重载误区!!!可以不在一个类中!!!相关的知识,希望对你有一定的参考价值。

今天纠正一个重载(Overload)误区。

定义

网上很多资料介绍重载的定义都是:
1.发生在同一个类中,
2.方法名必须完全相同
3.参数列表必须不同。
首先这里有极大的误区,重载发生在一个类中,这是错误的,可以不发生在一个类中。

来自oracle官网文档的定义:

第一段翻译:
如果一个类的两个方法(无论是在同一个类中声明的,还是都由一个类继承的,还是一个声明后继承的)具有相同的名称,但签名不是覆盖等效的,那么该方法名被称为重载。

代码演示

平常的重载:
下面展示一些 。

public class Test01 {
    public int add(int a){
        return a;
    }
    //形参列表,类型,个数,顺序,三者满足一个不同即可
    //(对于顺序,这里的参数肯定不是相同的类型,否则顺序的先后就毫无意义。)
    //构成重载add
    public int add(int a,int b){
        return a+b;
    }
}

继承下的重载:
推翻了,重载只能发生在一个类中, 这句话是错误的。
重载可以不在一个类中!!!

class Sup{
    public int fun(int n){
        return n;
    }
}

class Sub extends Sup{
    //子类中重载fun
    public int fun(int a,int b){
        return a+b;
    }
}

注意事项

1、在使用重载时只能通过不同的参数样式。
2、不能通过访问权限、返回类型、抛出的异常进行重新加载;
3、方法的异常类型和数目不会对重新加载造成影响;
4、对于继承来说,如果某一方法在父类中是访问权限是private,那么就不能在子类对其进行重载,如果定义的话,也只是定义了一个新方法,而不会达到重载的效果。

以上是关于重载误区!!!可以不在一个类中!!!的主要内容,如果未能解决你的问题,请参考以下文章

静态常量static和方法重载

重载隐藏覆盖的区别

类中的函数重载

导航架构片段重载问题

JavaSE7基础 类中 构造方法的重载

C++深度剖析学习总结 22 类中的函数重载