黑马程序员技术交流社区
标题:
子类继承父类时父类必须有不带参数的父类的方法么
[打印本页]
作者:
李凤鸣
时间:
2012-12-3 21:49
标题:
子类继承父类时父类必须有不带参数的父类的方法么
class Super
{
int i=0;
public Super(String s)
{
i=1;
}
}
class Demo3 extends Super
{
public Demo3(String s)
{
i=2;
}
public static void main(String[] args) {
Demo3 demo3=new Demo3("yes");
System.out.println(demo3.i);
}
}
复制代码
如上例:必须有一个super()的方法才可以么
作者:
张其辉
时间:
2012-12-3 22:01
子类在实例化过程中:子类中所有的构造方法默认都会访问父类中的空参数的构造函数,因为子类继承了父类,获取了父类中的内容,所以在子类在使用父类内容之前需要了解父类内容是怎么初始化的,所以子类在创建对象时必须访问父类的构造函数,为了完成这个动作就在子类的构造函数中加入了super语句。
但是如果父类中没有定义空参数构造函数,那么子类在访问父类时必须要明确访问那个父类构造函数。
如果类中没有定义构造函数,会默认产生一个空参数构造函数,但是一旦定义的有了构造函数,就没有默认的空参数构造函数了。
所以你这个要访问指定参数的构造函数,而不会访问空参数构造函数。
作者:
赵学刚
时间:
2012-12-3 22:07
class Super
{
int i=0;
public Super(String s)
{
i=1;
}
}
class Demo3 extends Super
{
public Demo3(String s)
{
super(s)
i=2;
}
public static void main(String[] args) {
Demo3 demo3=new Demo3("yes");
System.out.println(demo3.i);
}
}
//可以没有,针对你这程序来说是必须有带参数的构造函数super(s):因为你的父类构造函数是带参数的,jvm运行子类时默认是在构造函数第一行加 super()调用父类的构造函数,但是你的父类构造函数无参构造被你显示的带参数构造函数覆盖了,所以就调用不到父类构造函数类初始化子类,不能完成子类正常的初始化
作者:
黑马刘向阳
时间:
2012-12-3 22:15
要么指定调用的父类的构造函数,要么给父类加上空参数的构造函数
作者:
赵学刚
时间:
2012-12-3 22:21
类似楼主这个程序 没有super(s)那么子类要拿到父类的 int i=0 就要在子类建立一个父类的对象,这就失去了继承的意义,也可以说super(s)省去了 在子类建立父类对象的过 程,更为方便实用。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2