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
也就是先找到“爷类”输出,再找到父类,最后输出本类。

浙公网安备 33010602011771号