Java继承篇(一)———构造器

子类继承父类构造器之后的特点:

○子类中所有构造器的默认都会访问父类的无参构造器

需要注意的是如果父类的无参构造器被覆盖了(无参构造器默认存在,通常是在创建有参构造器之后没有添加无参构造器),那么程序无法执行,这时根据需要有两种方法来解决:

1、给父类添加无参构造器;

2、在子类构造器中第一行添加super(参数)来解决

为了方便理解,请自行思考后给出以下代码运行结果:

查看代码
package com.itheima.d15_constructor3;

class SuperClass {
    private int n;
    SuperClass(){
        System.out.println("SuperClass()");
    }
    SuperClass(int n) {
        System.out.println("SuperClass(int n)");
        this.n = n;
    }
}
// SubClass 类继承
class SubClass extends SuperClass{
    private int n;

    SubClass(){ // 自动调用父类的无参数构造器
        System.out.println("SubClass");
    }

    public SubClass(int n){
        super(300);  // 调用父类中带有参数的构造器
        System.out.println("SubClass(int n):"+n);
        this.n = n;
    }
}
// SubClas2 类继承
class SubClass2 extends SubClass{
    private int n;

    SubClass2(){
        super(300);  // 调用父类中带有参数的构造器
        System.out.println("SubClass2");
    }

    public SubClass2(int n){ // 自动调用父类的无参数构造器
        System.out.println("SubClass2(int n):"+n);
        this.n = n;
    }
}
public class TestSuperSub{
    public static void main (String args[]){
        System.out.println("------SubClass 类继承------");
        SubClass sc1 = new SubClass();
        SubClass sc2 = new SubClass(100);
        System.out.println("------SubClass2 类继承------");
        SubClass2 sc3 = new SubClass2();
        SubClass2 sc4 = new SubClass2(200);
    }
}

 

结果如下所示:

------SubClass 类继承------
SuperClass()
SubClass
SuperClass(int n)
SubClass(int n):100
------SubClass2 类继承------
SuperClass(int n)
SubClass(int n):300
SubClass2
SuperClass()
SubClass
SubClass2(int n):200

首先分析SubClass的输出内容:我们在创建第一个对象时用的是SubClass的无参构造器,所以最先输出的是父类的无参构造器的内容,然后再是SubClass这个本类无参构造器的内容

然后是带参数的SubClass的输出内容:原理其实一样,只是调用的是有参构造器。

最重要的是SubClass2类的继承,因为这里我采用的是“多层”继承,即:SubClass2-->SubClass-->SuperClass

也就是先找到“爷类”输出,再找到父类,最后输出本类。

posted @ 2022-02-21 17:09  Object_gl  阅读(208)  评论(0)    收藏  举报