java子类调用父类构造方法举例
代码源于牛晓太第二版 java程序设计教程
这个例子很好的利用了,子类调用父类构造方法,一开始对此代码很不理解,查了几天资料,差不多弄懂了,很有成就感,想把心得完整的叙述下来。
package First;
class father1
{
int f;//成员变量
//构造方法
public father1()
{
f=1;
System.out.println("父类无参构造方法");
}
public father1(int f)
{
this.f=f;
}
}
class son1 extends father1//子类
{
int s;
public son1()
{
s=1;
System.out.println("子类无参构造方法");
}
public son1(int f,int s)
{
super(f);
//this.f=f;
this.s=s;
}
//输出子类中各个成员变量的值
public void print()
{
System.out.println("f="+f+",s="+s);
}
}
public class SuperCallConstructorDemo4_11 {
public static void main(String[] args)
{
son1 s1=new son1();
son1 s2=new son1(15,20);
s1.print();
s2.print();
}
}
运行结果:
先看主函数:
public static void main(String[] args)
{
son1 s1=new son1();
son1 s2=new son1(15,20);
}
先执行:son1 s1=new son1();
注意: 因为子类无参的构造函数即son()中没有显示调用 有参super(参数),
所以默认调动无参的父类构造方法:
f=1;
打印:父类无参构造方法;
s=1;
打印:子类无参构造函数;
打印:f=1,s=1;
然后接着执行:son1 s2=new son1(15,20);
注意:因为子类有参的构造函数即son(参数) 显示调用了 有参super(参数),
所以系统就不再有默认无参构造函数:
先执行父类有参构造方法:
this.f=f=15;
再执行子类有参构造函数:
this.s=s=20;
为了证明想法是正确的,
对代码修改一下:
public son1(int f,int s)
{
//super(f);
//this.f=f;
this.s=s;
}
将super(f)去掉之后,当执行son1 s2=new son1(15,20);
因为没有显示调用了 有参super(参数),所以默认父类无参构造函数,