我最近被一个问题困扰了,问题是:子类构造方法调用父类构造方法,用super调用,这算构造方法的重载吗。以下是我的思考。
1方法重载的概念:发生在同一个类中。
若这样理解,显然子类构造方法调用父类构造方法是调用,而不是重载的概念。但继承的概念,子类继承父类所有(不包括private)
若这样解释,显然,在子类中含有一份隐藏的父类构造方法,因为这也是子类成员中的一部分,这样解释,子类调用父类构造也就可以理解为调用本类自己的东西,逻辑上应该算重载。然而,继承的另一个概念,子类不会继承父类构造方法,但可以用super关键字调用,若这样理解,那么子类构造调用父类构造方法就是调用,而不是构造方法重载。这不是答案,这是我的思考,请大牛来帮我看看问题

解决方案 »

  1.   

    不算
    你可以把super看作是子类的一个特殊属性,它指向子类内部的父类对象,你调用父类方法只是调用这个特殊对象的方法,所以跟重载没有关系
    另外,重载也不一定发生在同一个类,子类也可以新定义一个和父类的方法同名,返回值相同但参数不同的方法,这也算重载,不算重写
      

  2.   

    子类继续父类其实是完全继续的,但是因为其中的部分方法或变量有作用域的关系造成子类无法直接使用。
    然后要明白重载是什么,重载是方法名相同参数不同。子类构造法调用父类构造法显然不算重载,因为普通方法无法让子类直接调用父类构造,所以java提供super这个关键字用来调用父类的构造。