Java中构造方法的继承问题


1.父类的构造方法是不会被子类继承的,但是子类的构造方法中会有一个隐式的super()来调用父类中的无参数构造方法。
验证代码如下:

public class FatherClass {
    int a;
    int b;
    public FatherClass() {
        a = 10;
    }
    public FatherClass(int b) {
        this.b = b;
    }

    public void getClassName(){
    System.out.println("我是FatherClass");
    }
}

public class Test extends FatherClass{
    
    public static void main(String[] args) {
        Test t = new Test();
        System.out.println(t.a);
        System.out.println(t.b);
    }
    @Override
    public void getClassName(){
        System.out.println("我是Test");
    }
}

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28

执行Test类,输出结果是10和0。

上面代码在内存中的执行过程如下图(我只画了堆中的内存变化):

在这里插入图片描述

2.如果子类调用了父类的有参构造方法,就不会再有隐式super()的调用父类的无参构造了

public class FatherClass {
    int a;
    int b;
    public FatherClass() {
        a = 10;
    }
    public FatherClass(int b) {
        this.b = b;
    }
}

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10

public class Test extends FatherClass{
    public Test(int b) {
        super(b);
    }
    
    public static void main(String[] args) {
        Test t = new Test(10);
        System.out.println(t.a);
        System.out.println(t.b);
    }
}

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12

输出结果0和10

3.抽象类本身不能被实例化,但是可以有构造方法。
---------------------
作者:czx2018
来源:CSDN
原文:https://blog.csdn.net/czx2018/article/details/82852548
版权声明:本文为博主原创文章,转载请附上博文链接!


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM