对于有相当开发经验的人知道,在类之间存在继承关系的时候,根据业务需要子类会相应的调用父类的方法,今天咱们就先从构造函数入手,看看子类调用父类的方法情况,为初学者或者想我这上年纪的程序员做个笔记,以备后查。
两个类(随便写的)
/**
* 父类
*/
public class Parent {
public Parent()
{
System.out.println("Parent 父类 《无参》 构造器 ");
}
public Parent(int inNUmP)
{
System.out.println("Parent 父类 《有参》 构造器 inNUmP:"+inNUmP);
}
public Parent(String inStrP)
{
System.out.println("Parent 父类 《有参》 构造器 inStrP:"+inStrP);
}
}
/**
* 子类
*/
public class Sun extends Parent {
public Sun()
{
/***
* 显示引用和不显示引用都会加载父类的无参构造器
* 放到不是代码最前面会报错
*/
// super();
System.out.println("Sun 子类 《无参》 构造器");
}
public Sun(int inNum)
{
/**
* 在没有指定父类的有参构造器的情况下,无论显示还是不显示调用,父类的无参构造都被调用
* Parent 父类 《无参》 构造器
* Sun 子类 《有参》 构造器 inNum:1
* Sun1 main
* */
//super();
/**
* 指定父类的有参构造器后,不在调用父类的无参构造器
*
* Parent 父类 《有参》 构造器 inNUmP:2
* Sun 子类 《有参》 构造器 inNum:1
* Sun1 main
* */
// super(2);
System.out.println("Sun 子类 《有参》 构造器 inNum:"+inNum);
}
public Sun(String inStr)
{
/**
* 在没有指定父类的有参构造器的情况下,无论显示还是不显示调用,父类的无参构造都被调用
* Parent 父类 《无参》 构造器
* Sun 子类 《有参》 构造器 inNum:1
* Sun1 main
* */
//super();
/**
* 指定父类的有参构造器后,不在调用父类的无参构造器
*
* Parent 父类 《有参》 构造器 inNUmP:2
* Sun 子类 《有参》 构造器 inNum:1
* Sun1 main
* */
super(inStr);
System.out.println("Sun 子类 《有参》 构造器 inStr:"+inStr);
}
public static void main(String[] args) {
System.out.println("----------实例化无参子类----1----------");
Sun Sun1=new Sun();
System.out.println("------------实例化有参子类---非显式调用父类有参构造----2-----------");
Sun Sun2=new Sun(1);
System.out.println("------------实例化有参子类---显式调用父类有参构造----3-----------");
Sun Sun3=new Sun("显式调用父类字符串构造函数");
System.out.println("------------上行无参实例化子类------4------------");
Parent Sun4=new Sun();
System.out.println("------------上行有参实例化子类-----非显式调用父类构造器-5------------");
Parent Sun5=new Sun(1);
System.out.println("------------上行有参实例化子类-----显式调用父类构造器-6------------");
Parent Sun6=new Sun("上行显式调用父类《有参》构造函数");
System.out.println("Sun1 main");
}
运行子类结果:
----------实例化无参子类----1----------
Parent 父类 《无参》 构造器
Sun 子类 《无参》 构造器
------------实例化有参子类---非显式调用父类有参构造----2-----------
Parent 父类 《无参》 构造器
Sun 子类 《有参》 构造器 inNum:1
------------实例化有参子类---显式调用父类有参构造----3-----------
Parent 父类 《有参》 构造器 inStrP:显式调用父类字符串构造函数
Sun 子类 《有参》 构造器 inStr:显式调用父类字符串构造函数
------------上行无参实例化子类------4------------
Parent 父类 《无参》 构造器
Sun 子类 《无参》 构造器
------------上行有参实例化子类-----非显式调用父类构造器-5------------
Parent 父类 《无参》 构造器
Sun 子类 《有参》 构造器 inNum:1
------------上行有参实例化子类-----显式调用父类构造器-6------------
Parent 父类 《有参》 构造器 inStrP:上行显式调用父类《有参》构造函数
Sun 子类 《有参》 构造器 inStr:上行显式调用父类《有参》构造函数
Sun1 main
总结: 1、子类 不显式的 调用父类指定构造器时,父类的无参构造一定别调用
2、子类 显式 调用父类有参构造器时,父类的无参构造将不再被调用。
3、子类调用父类构造器的super(option)方法必须放在 子类方法的代码最前端。
可以在加些其他方法进行相关验证,以后再试啦!喜欢帮到需要的人。