黑马程序员技术交流社区

标题: 关于super的用法 [打印本页]

作者: zy1349    时间: 2013-12-19 09:51
标题: 关于super的用法
本帖最后由 zy1349 于 2013-12-19 10:12 编辑

子类在继承父类属性时不继承父类的构造方法吗? 为什么要使用super来调用父类的构造方法,又为什么一定要放在第一行,具体的使用方法又是什么呢?

作者: 刘松703    时间: 2013-12-19 10:01
调用父类的构造函数是为了完成一些初始化,你可以在某些关键的地方加一些测试语句来观察其运行的顺序,这样你就明白了
作者: 恨死我了    时间: 2013-12-19 10:09
有时需要子类调用父类中的方法的情况,但是如果这是子类中的方法与父类中的方法同名,即子类覆盖了父类中的方法,显然如果直接调用方法名是调用的子类重新实现的操作,如果想要调用父类中的方法,就需要用到super关键字,super可以调用父类中的成员方法和成员变量。
为什么放在第一行?因为父类中的数据子类可以直接调用,所以子类在创建对象的时候,必须要先查看父类是如何对这些数据初始化的。
class Deom1
{
     public Deom1(int i)
        {        
        }
}

class Deom2 extends Deom1
{
        public Deom2(int i)
        {
                super(i);
        }

        public static void main(String[] args)
        {
                Deom1 d = new Deom2(100);
                // 要想实例化Deom2,必须先实例化其父类Deom1,
                // 由于Deom1中没有定义默认构造器,所以必须显示的用super(i)来调用Deom1类中的构造器
        }
}
作者: 一年之后    时间: 2013-12-19 10:20
子类在继承父类的时候,不会继承父类的构造方法,但是会调用父类的构造函数,就用到了super
为什么用super而且放在子类构造函数的第一行,在子父类继承的时候,必须先初始化继承父类的成员,在初始化行子类的承运,就像父母与孩子一样,得现有父母才有孩子,
还有一个就是查看父类对象在初始化中都做了什么动作。
当父类初始化时定义好功能时的,子类要用就不用自己定义了。直接拿过来用就行了。
作者: 城市儒侠    时间: 2013-12-19 11:15
继承时,在对子类进行对象初始化的时候,父类的构造函数也会运行。
这是因为子类的构造函数默认第一行有一条隐式语句super();。
super();会访问父类中空参数的那个构造函数。

为什么子类一定要访问父类中的构造函数
因为父类中的数据,子类可以直接获取。所以在子类对象建立的时候,首先要查看父类是如何对这些数据进行初始化的。所以子类要现访问父类的构造函数。

如果要访问的父类中指定的构造函数,可以在子类中通过手动定义super语句的方式来指定。

当父类中没有空参数的构造函数时,子类必须手动通过super语句行驶来指定要访问的父类中的构造函数。

以上是我自己总结的。希望对你有帮助。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2