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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 李凤鸣 中级黑马   /  2013-1-8 15:01  /  1233 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 张向辉 于 2013-1-16 12:08 编辑
  1. class Person
  2. {

  3.     private String name;
  4. Person(String name)
  5. {
  6.     this.name=name;
  7. }
  8. void setName(String name)
  9. {
  10.     this.name=name;
  11. }
  12. public String getName()
  13. {
  14.     return name;
  15. }
  16. }
  17. class Student extends Person
  18. {
  19. public Student(String name) {
  20.     super(name);
  21. }
  22. }
复制代码
类函数Student 中super(name);
指的是this.name=name么

评分

参与人数 1黑马币 +9 收起 理由
Rancho_Gump + 9 赞一个!

查看全部评分

4 个回复

正序浏览
我的理解是 this 是本类,super是父类
回复 使用道具 举报
本帖最后由 徐帅 于 2013-1-8 15:22 编辑

你这里是访问父类的构造函数,即Person类的构造函数:Person(String name){this.name = name}
另外对于继承中的构造函数:
1、在对子类对象进行初始化时,父类的构造函数也会运行,那是因为子类的构造函数默认第一行有一条隐式的语句 super();
2、super()会访问父类中空参数的构造函数,而且子类中所有的构造函数默认第一行都是super(),同样是因为初始化要先执行。
3、当父类中没有空参数的构造函数,就必须用super来指定。
4、构造函数的调用是super(),一般函数用super.(),比如调用父类的show方法,调用的方式为super.show()
注意:super语句一定定义在子类构造函数的第一行,(和this道理一样,先按照父类的方式进行初始化,再通过自己的方式初始化),子类必须要访问父类。

希望对楼主有帮助



评分

参与人数 1技术分 +1 收起 理由
Rancho_Gump + 1 赞一个!

查看全部评分

回复 使用道具 举报
super(name)代表的是子类调用了父类Person中的字符串为参数的构造函数,即
Person(String name)
{
   this.name=name;
}
这个方法,并将子类Student接收到的name作为传参。

评分

参与人数 1黑马币 +9 收起 理由
Rancho_Gump + 9 赞一个!

查看全部评分

回复 使用道具 举报
本帖最后由 黑马王振宇 于 2013-1-8 15:08 编辑

那么理解也可以,你这里的问题就是:父类中定义完的方法子类不用重新定义,直接拿过来用就可以了。
带参数的就调用相应的父类中的构造方法。
首先你student中接收进来一个参数name,super()中带参数,那么他调用的就是父类中带参数的构造函数Person(String name)。

评分

参与人数 1黑马币 +9 收起 理由
Rancho_Gump + 9 赞一个!

查看全部评分

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