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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 咪咪 黑马帝   /  2011-11-8 10:32  /  1304 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

super只能用在子类中调用父类的构造函数吗?如果父类有多个构造函数那么怎么区分呢?是不是同样要写参数啊?

3 个回复

倒序浏览
super(),默认调用的是不带参数的构造函数,如果要调用有参数的构造函数,super(args),在括号内传入参数就行了。
回复 使用道具 举报
子类可以继承父类的非私有成员变量和成员方法(不是以private关键字修饰的)作为自己的成员变量和成员方法,但是,如果子类中声明的成员变量与父类的成员变量同名,则子类不能继承父类的成员变量,此时称子类的成员变量隐藏了父类的成员变量。如果子类中声明的成员方法与父类的成员方法同名,并且方法的返回值及参数个数和类型也相同,则子类不能继承父类的成员方法,此时称子类的成员方法覆盖了父类的成员方法。这时,如果想在子类中访问父类中被子类隐藏的成员方法或变量时,就可以使用super关键字。super关键字主要有以下两种用途。
1.调用父类的构造方法
子类可以调用由父类声明的构造方法。但是必须在子类的构造方法中使用super关键字来调用。其具体的语法格式如下:
super([参数列表]);
如果父类的构造方法中包括参数,则参数列表为必选项,用于指定父类构造方法的入口参数。
下面介绍如何在子类中调用父类的构造方法。
在Animal类中添加一个默认的构造方法和一个带参数的构造方法,具体代码如下:
public Animal(){
}
public Animal(String strSkin){
skin=strSkin;
}
这时,如果想在子类Bird中使用父类的带参数的构造方法,则需要在子类Bird的构造方法中通过以下代码进行调用。
public Bird(){
super("羽毛");
}
2.操作被隐藏的成员变量和被覆盖的成员方法
如果想在子类中操作父类中被隐藏的成员变量和被覆盖的成员方法,也可以使用super关键字,具体格式如下:
super.成员变量名
super.成员方法名([参数列表])
例如,如果想在子类Bird的方法中改变父类Animal的成员变量skin的值可以使用以下代码:
super.skin="羽毛";
如果想在子类Bird的方法中使用父类Animal的成员方法move()可以使用以下代码:
super.move();
回复 使用道具 举报
在子类中只能在构造方法中引用父类的构造方法,而且必须在构造方法的第一行,可以用super传递参数来区别调用父类的哪个构造函数,由于只能在第一行所以,所以子类一个构造函数中只能调用一次父类的构造函数
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马