19章:繼承

1.在實例化子類時會默認調用子類的無參構造方法,但是在執行子類構造前,會首先自動實例化父類構造,先對父類的對

象實例化。

 2.調用父類構造函數,可以用super()表示。

例子一
class A{
  public A(){ 
    System.out.println("*****************");
    }
  }

class B extends A{
  public B(){
    super();//表示由子類構造調用父類構造,加不加都可以
    System.out.println("#################");
    }
  }

public class TestJava{
  public static void main(String args[]){//static方法不用實例化類便可以調用                                                                                                                                                                                                            
    B b = new B();   
    }
  }
//也就是證明,在子類的構造中其實一直隱藏着一行super()語句,但是在進行無參父類構造調用的時候
//寫上super()是沒有意義的,我們往往是在父類沒有提供無參構造的時候使用的。

例子二
class A{
  public A(String name){ 
    System.out.println("*****************");
    }
  }

class B extends A{
  public B(String name){
    super(name);
    System.out.println("#################");
    }
  }

public class TestJava{
  public static void main(String args[]){//static方法不用實例化類便可以調用                                                                                                                                                                                                            
    B b = new B("SMITH");   
    }
  }
//所以在大部分情況下,出現super()往往是在需要調用父類有參構造的情況下,在大多數情況下父類一般
//都有無參構造方法,所以子類不會出現super(),而且對super()的調用必須是構造其的第一個語句。

例子三

class B extends A{
  public B(String name){
    System.out.println("#################");
    super(name);  //super()的調用必須是子類構造其的第一個語句
    }
  }

3.分析:關於super()與this()的問題。

            之前學習過this(),表示調用本類的其他構造方法,而現在有了繼承關係以後,可以由super()調用父類中指定參數的構造函數。並且這兩個語句都一定要出現在首行(意味着不能同時出現這兩個語句)

//不讓子類的構造器裏面調用父類的構造方法,在子類的構造方法出現了this();這樣就不會出現super()的
//默認執行
class A{
  public A(){ 
    System.out.println("*****************");
    }
  }

class B extends A{
  public B(){
    this(ss);//這樣會導致循環沒有一個出口
    };
  public B(String name){
    this();
    System.out.println("#################");
    }
  }

public class TestJava{
  public static void main(String args[]){//static方法不用實例化類便可以調用                                                                                                                                                                                                            
    B b = new B("SMITH");   
    }
  }

4.總結:

(1)繼承的唯一好處就是進行了功能的擴充,並且Java只支持單繼承侷限

   (2)   子類對象實例化時一定要先實例化父類對象,然後再實例化子類自己的對象(因爲子類實例化後需要使用父類的屬性,父類的屬性是在父類實例化後才能使用的。開闢堆棧內存空間。)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章