黑马程序员技术交流社区
标题:
泛型限定
[打印本页]
作者:
赵卓辉
时间:
2014-3-4 15:15
标题:
泛型限定
本帖最后由 赵卓辉 于 2017-6-2 16:54 编辑
xx
复制代码
xxxx
作者:
行如止水
时间:
2014-3-4 15:37
子类构造时要访问父类的构造方法,所以子类的构造函数里要写super,
作者:
老貓钓鱼
时间:
2014-3-4 15:41
子类构造函数需要访问父类构造方法super,如果子类构造函数里没写super的话,虚拟机自动添加super(),而你的父类中没有空参的构造方法,只有带参的,所以你必须自己写明带参的父类构造方法
作者:
一年_Hei
时间:
2014-3-4 16:43
子类初始化必须先初始化父类,所以super(name)必须写,
如果子类不用this.name=name;那么子类自己的name没有初始化值,所以是null。
it.next().getName拿的值就是空,
如果想不用this.name=name;就用it.next().getName能拿到值,就不要覆盖父类的getName()方法。
把子类的getName()方法删掉就OK了
作者:
郝大龙0104
时间:
2014-3-4 17:07
你这是继承问题没有搞明白吧。。 子类继承父类时,name 和 getName方法 子类都会有的其中 你的构造方法只有一个 所以 子类的构造方法 中必须有super(name)
两个类继承关系的代码如下:
class Person{
private String name;
public String getName() {
return name;
}
Person(String name){
this.name = name;
}
}
class Student extends Person{
Student(String name) {
super(name);
}
}
复制代码
作者:
我要的幸福呢
时间:
2014-3-4 17:12
class Student extends Person{
private String name;
public String getName(){
return name;
}
Student(String name){
/*
* 如果注释下面这行,程序报错
* 原因在于,如果你在父类Person中没写任何构造方法,那么会默认有一个空参的构造方法,
* 而一旦自己写了带参的构造方法,默认的空参构造方法就没有了,而子类的构造方法默认调用
* 父类的空参构造,此时父类没有空参构造,所以会报错,因此要么调用父类的有参构造,要么
* 在父类中再写一个空参构造。
*/
// super(name);
/*
* 注释下面这行,打印为null,null,null
* 原因在于,父类的name属性是私有的,子类并没有继承该属性,在子类的getName方法中,返回
* 的是子类的name属性值,而super(name)是给父类的name属性赋值,所以如果没有下面这句,子类
* 的属性根本没有赋值,必然打印null。所以,要么用下面代码给本类name属性赋值,要么在本类
* 的getName方法中,返回super.getName(),就可以打印出结果了
*/
this.name=name;
}
}
复制代码
作者:
赵卓辉
时间:
2014-3-4 20:13
我要的幸福呢 发表于 2014-3-4 17:12
:handshake谢谢,懂了。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2