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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 赵卓辉 中级黑马   /  2014-3-4 15:15  /  1159 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 赵卓辉 于 2017-6-2 16:54 编辑
  1. xx
复制代码
xxxx

评分

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

查看全部评分

6 个回复

倒序浏览
子类构造时要访问父类的构造方法,所以子类的构造函数里要写super,
回复 使用道具 举报
子类构造函数需要访问父类构造方法super,如果子类构造函数里没写super的话,虚拟机自动添加super(),而你的父类中没有空参的构造方法,只有带参的,所以你必须自己写明带参的父类构造方法

评分

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

查看全部评分

回复 使用道具 举报
子类初始化必须先初始化父类,所以super(name)必须写,
如果子类不用this.name=name;那么子类自己的name没有初始化值,所以是null。
it.next().getName拿的值就是空,
如果想不用this.name=name;就用it.next().getName能拿到值,就不要覆盖父类的getName()方法。
把子类的getName()方法删掉就OK了

评分

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

查看全部评分

回复 使用道具 举报
你这是继承问题没有搞明白吧。。  子类继承父类时,name   和  getName方法  子类都会有的其中 你的构造方法只有一个   所以 子类的构造方法 中必须有super(name)
两个类继承关系的代码如下:
  1. class Person{
  2.         private String name;

  3.         public String getName() {
  4.                 return name;
  5.         }
  6.         Person(String name){
  7.                 this.name = name;
  8.         }
  9. }

  10. class Student extends Person{

  11.         Student(String name) {
  12.                 super(name);
  13.         }
  14.        
  15. }
复制代码

评分

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

查看全部评分

回复 使用道具 举报
  1. class Student extends Person{
  2.         private String name;
  3.         public String getName(){
  4.                 return name;
  5.         }
  6.         Student(String name){
  7.                 /*
  8.                  * 如果注释下面这行,程序报错
  9.                  * 原因在于,如果你在父类Person中没写任何构造方法,那么会默认有一个空参的构造方法,
  10.                  * 而一旦自己写了带参的构造方法,默认的空参构造方法就没有了,而子类的构造方法默认调用
  11.                  * 父类的空参构造,此时父类没有空参构造,所以会报错,因此要么调用父类的有参构造,要么
  12.                  * 在父类中再写一个空参构造。
  13.                  */
  14. //                super(name);
  15.                 /*
  16.                  * 注释下面这行,打印为null,null,null
  17.                  * 原因在于,父类的name属性是私有的,子类并没有继承该属性,在子类的getName方法中,返回
  18.                  * 的是子类的name属性值,而super(name)是给父类的name属性赋值,所以如果没有下面这句,子类
  19.                  * 的属性根本没有赋值,必然打印null。所以,要么用下面代码给本类name属性赋值,要么在本类
  20.                  * 的getName方法中,返回super.getName(),就可以打印出结果了
  21.                  */
  22.                 this.name=name;        
  23.         }
  24. }
复制代码


评分

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

查看全部评分

回复 使用道具 举报 1 0

:handshake谢谢,懂了。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马