java 关于 子类 父类构造函数调用

       对于有相当开发经验的人知道,在类之间存在继承关系的时候,根据业务需要子类会相应的调用父类的方法,今天咱们就先从构造函数入手,看看子类调用父类的方法情况,为初学者或者想我这上年纪的程序员做个笔记,以备后查。

 

两个类(随便写的)

/**
 * 父类
 */
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)方法必须放在 子类方法的代码最前端。

 

可以在加些其他方法进行相关验证,以后再试啦!喜欢帮到需要的人。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

luning95

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值