继承2

1、子类继承父类时构造方法的调用规则如下:

(1)如果子类的构造方法中没有通过super显示调用 父类的有参构造方法,也没有通过this显示调用其自身的其它构造方法,则系统会默认先调用父类的无参构造方法,在这种情况下是否写super();语句,效果都一样:

实例如下:

 1 package com.cn.jicheng2;
 2 /*
 3  * 父类A
 4  */
 5 public class A {
 6     private int age;
 7     private String name;
 8     public A(){
 9         
10     }
11     public A(String name,int age){
12         this.name=name;
13         this.age=age;
14     }
15     public void show(){
16         System.out.println("姓名是:"+this.name+"
年纪是:"+this.age);
17     }
18 }
 1 package com.cn.jicheng2;
 2 /*
 3  * 子类B
 4  */
 5 public class B extends A{
 6     private String sex;
 7 
 8     public String getSex() {
 9         return sex;
10     }
11 
12     public void setSex(String sex) {
13         this.sex = sex;
14     }
15     
16 }
1 package com.cn.jicheng2;
2 
3 public class Test {
4     public static void main(String[] args) {
5         B b=new B();//这个测试类中,实例了子类的对像,符合第一条规则,默认也会调用父类的无参数构造方法,父类的无参构造方法就是new A();
6         //所以子类才可以调用父类的方法
7         b.show();
8     }
9 }

(2)如果子类的构造方法中通过super显示调用父类的有参构造方法,那么将执行父类相应的构造方法,而不执行父类的无参构造方法

package com.cn.jicheng2;
/*
 * 父类A
 */
public class A {
    private int age;
    private String name;
    public A(){
        System.out.println("父类的无参构造方法输出");
    }
    public A(String name,int age){
        this.name=name;
        this.age=age;
    }
    public void show(){
        System.out.println("姓名是:"+this.name+"
年纪是:"+this.age);
    }
}


package com.cn.jicheng2;
/*
 * 子类B
 */
public class B extends A{
    private String sex;

    public B(String name,int age) {
        super(name,age);//调父类的有参构造方法
    }

    public String getSex() {
        return sex;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }
    
}

package com.cn.jicheng2;

public class Test {
    public static void main(String[] args) {
        B b=new B("jj",12);
        b.show();
    }
}

(3)如何子类的构造方法中通过this显示调用自身的其它构造方法,在相应构造方法中应用以上两条规则。

原文地址:https://www.cnblogs.com/sincoolvip/p/5499500.html