構造函數,super()


一、構造函數的作用

  • 創建類的對象,只有對象才能調用一個類中的方法和屬性

二、在有繼承關系的類中,創建子類對象,初始化的順序

  • 先父類構造 —>后子類構造

  • 為什么父類構造會被調用?因為有繼承關系,子類創建了對象會用到父類的屬性方法,所以父類也要初始化,不然你繼承父類而不用父類的屬性和方法,那繼承還有什么意義。

  • 怎么調用父類構造的?在子類構造方法第一行默認調用super(),這意思就是調用父類的空參數構造函數,super()你加了系統不加,你不加系統默認有一個

三、空參數構造函數必須有(關鍵)

+在一個類中,肯定會有構造函數,而且肯定會有空參構造函數,總的來說就是,1、只有空參構造 2、空參構造以及其他重載的多個有參構造

  • 如果你沒寫任何構造,系統默認添加空參構造,如果你寫了有參構造,那么你必須把那個空參構造也顯示的添加上

四、this() super()

+ this()調用的是本類中的空參構造,本類空參構造中其實也隱含super(),所以也會調用到父類空參構造:有參構造—this()—本類無參構造—spuer()—父類無參構造—父類被初始化

  • super() 調用父類空參數構造方法,

  • super(參數一,參數二,….),調用父類指定參數個數的構造函數

五、什么時候必須在構造函數里面調用super(參數)

  • 如果你創建子類對象 同時想調用父類非空參數的構造函數,那么就得在第一行加上super(參數個數):這種情況一般沒什么意義

六:綜合來說:我的理解

super()不加,系統默認會加上,super()的作用就是調用父類空參數構造,初始化父類,初始化了父類,子類才能通過創建的子類對象調用父類的屬性和方法,這就是super()的意義。

  1. class A {
  2. public A(){
  3. System.out.println("父類無參構造");
  4. }
  5. public A(String a){
  6. //這里默認調用空參構造,所以必須定義空參構造
  7. System.out.println("父類有參構造");
  8. }
  9. }
  10. class B extends A{
  11. B(){
  12. System.out.println("子類無參構造");
  13. }
  14. public B(String a){
  15. this();
  16. System.out.println("子類有參構造");
  17. }
  18. }
  19. public class test {
  20. public static void main(String[] args) {
  21. // A a1=new A();
  22. // A a2=new A("啦啦啦");
  23. //B b1 = new B();
  24. B b2 = new B("呃呃呃");
  25. }
  26. }


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM