A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© zy1349 中级黑马   /  2013-12-19 09:51  /  947 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 zy1349 于 2013-12-19 10:12 编辑

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

评分

参与人数 1技术分 +1 收起 理由
乔兵 + 1

查看全部评分

4 个回复

倒序浏览
调用父类的构造函数是为了完成一些初始化,你可以在某些关键的地方加一些测试语句来观察其运行的顺序,这样你就明白了
回复 使用道具 举报
有时需要子类调用父类中的方法的情况,但是如果这是子类中的方法与父类中的方法同名,即子类覆盖了父类中的方法,显然如果直接调用方法名是调用的子类重新实现的操作,如果想要调用父类中的方法,就需要用到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类中的构造器
        }
}

评分

参与人数 1技术分 +1 收起 理由
乔兵 + 1

查看全部评分

回复 使用道具 举报
子类在继承父类的时候,不会继承父类的构造方法,但是会调用父类的构造函数,就用到了super
为什么用super而且放在子类构造函数的第一行,在子父类继承的时候,必须先初始化继承父类的成员,在初始化行子类的承运,就像父母与孩子一样,得现有父母才有孩子,
还有一个就是查看父类对象在初始化中都做了什么动作。
当父类初始化时定义好功能时的,子类要用就不用自己定义了。直接拿过来用就行了。

评分

参与人数 1技术分 +1 收起 理由
乔兵 + 1

查看全部评分

回复 使用道具 举报
继承时,在对子类进行对象初始化的时候,父类的构造函数也会运行。
这是因为子类的构造函数默认第一行有一条隐式语句super();。
super();会访问父类中空参数的那个构造函数。

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

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

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

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

评分

参与人数 1技术分 +1 收起 理由
乔兵 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马