Java中super调用的问题

2025-02-03 04:05:25
推荐回答(3个)
回答1:

不写super(size,name)时创建子类对象会先通过父类的空参构造方法构造子类对象

也就是构造父类时使用的是
public Base()
{
size=1.0;
name="完美世界";
}
而写了super(size,name)则会调用父类的带参数构造方法来创建父类对象
也就是用的
public Base(double size,String name)
{
this.name=name;
this.size=size;
}
这两个构造方法的具体实现不同,所以最后继承到子类对象中的属性值会不同

回答2:

因为子类继承父类后,当执行之类的构造函数时,会在第一句隐式的加上super();这句话,所以当你不加super(size,name);这句话时,父类会执行自己的public Base(double size,String name)函数,此时,并没有赋值size、name,所以父类会使用自己本类的size、name,所以出现1.0--完美世界,当明确调用super(size,name)这句话时,父类执行自己的public Base(double size,String name)函数,并且由于赋值了size、name。所以显示5.6--测试对象--红色

回答3:

去掉super(size,name)说明你只是继承了父类写好的Base方法,所以默认调用size=1.0,name=“完美世界”,
加上super(size,name)说明子类重写了父类的方法,则调用的是子类传入的参数
明白吗?(说的不是很清楚)