当前位置 博文首页 > m0_48462648的博客:Java继承中的构造方法使用的理解,白话文,

    m0_48462648的博客:Java继承中的构造方法使用的理解,白话文,

    作者:[db:作者] 时间:2021-08-02 09:51

    后来才发现,并不是所有的喜欢都会有结果,终究要明白,遇见就已经很难得,你让我觉得,我们的关系,不止这样,又只能这样。

    在这里插入图片描述

    关于继承中的构造方法的执行顺序是怎么样的?

    首先创建子父类,创建测试类

    //父类
    public class Fu {
    }
    
    //子类
    public class Zi extends Fu{
    
    }
    
    //测试类
    public class TestA {
    }
    
    

    在父类中创建有参构造和无参构造

    //父类
    public class Fu {
    
        public Fu(){
            System.out.println("父类无参");
        }
        public Fu(int i ){
            System.out.println("父类有参");
        }
        
    }
    

    在子类中创建有参构造和无参构造

    //子类
    public class Zi extends Fu{
        public Zi(){
            System.out.println("子类无参");
        }
        public Zi(int age){
            System.out.println("子类有参");
        }
    }
    

    当我们在测试里面new了子类的对象,发现无法调用父类中的构造方法
    在这里插入图片描述

    构造方法无法被继承

    但是当我们只写了调用子类的无参方法,编译就会不一样:
    在这里插入图片描述在这里插入图片描述我们会发现,我们只是调用了子类的无参,但是父类的无参也输出了,这是因为在子类的构造方法内,有一个隐藏的super();,我们之前用supre调用的时父类属性,而super()调用的父类的构造方法
    在这里插入图片描述这个是系统默认调用的,当我们调用子类的无参构造的时候,他会执行第一个语句,也就是supper(),于是就会去执行父类的无参方法输出父类无参之后,程序继续让下执行,输出子类无参

    我们的子类构造方法是有参的,那么我们在测试类上加入参数
    在这里插入图片描述在这里插入图片描述
    在子类的有参内,同样还是有一个super(),同样回调取到父类无参,那怎么获取父类的有参呢?其实我们只需要在子类的构造方法内,在super()的括号内写入参数就可以了
    在这里插入图片描述我们在一个构造方法内写入super(),那么系统就不会使用它默认的super()了,使用我们写的这个来运行
    运行:
    在这里插入图片描述
    总结:

    • 构造方法无法被继承、但可以通过其他方法调用
    • 构造方法下有一个默认调用父类的无参构造,super()
    • 如果手动添加super,那么系统就会运行我们手动添加的这个
    • super必须使用在第一行
    • 我们使用this在构造方法内调取成员变量,也必须要放第一行,所以就跟super冲突了,所以this和super在一个构造中,不能同时使用

    来张心灵净化图,缓解身心疲劳:

    在这里插入图片描述

    在这里插入图片描述

    cs