Java基礎八,java基礎

來源:互聯網
上載者:User

Java基礎八,java基礎
Java基礎八一、子父類中建構函式的特點1.1 為什麼在子類構造對象時,發現,訪問子類建構函式時,父類也運行了呢?

原因是:在子類的建構函式中第一行有一個預設的隱式語句。 super();

構造方法中其實還有一句return;

 

子類的執行個體化過程:子類中所有的建構函式預設都會訪問父類中的空參數的建構函式。

 

說明:

其實只要記住子類建構函式中預設有一句super();即可,所以當父類為有參時,super也應該有參。

建構函式不能覆蓋,因為名字都不一樣。

建構函式也不能繼承過來,所以我們有super。

super只是java給你省了,不是這句話不需要,其實我們寫子類建構函式的時候都寫上。

 

        

                           

1.2 為什麼子類執行個體化的時候要訪問父類中的建構函式呢?

那是因為子類繼承了父類,擷取到了父類中內容(屬性),所以在使用父類內容之前,

要先看父類是如何對自己的內容進行初始化的。

 

所以子類在構造對象時,必須訪問父類中的建構函式。

為什麼完成這個必須的動作,就在子類的建構函式中加入了super()語句。

 

如果父類中沒有定義空參數建構函式,那麼子類的建構函式必須用super明確要調用

父類中哪個建構函式。

但是可以保證的是,子類中肯定會有其他的建構函式訪問父類的建構函式。

 

 

注意:supre語句必須要定義在子類建構函式的第一行。因為父類的初始化動作要先完成。

同時子類建構函式中如果使用this調用了本類建構函式時,

那麼super就沒有了,因為super和this都只能定義第一行。所以只能有一個。

子類中總有一個建構函式會調用父類建構函式。

 

所有的類都繼承了object類,所有的類都會有super();

建構函式的許可權和本類一樣。本類是public,建構函式也是預設public。

 

 

1.3 子父類變數初始化的問題

先執行子類構造器,然後執行父類構造器完成變數初始化,然後是子類的變數的顯示初始化。

父類的建構函式完成初始化,然後再是子類函數的初始化。

子類有show方法,在父類建構函式的時候show是運行子類的,因為是子類的對象。

 

 1 class Fu 2  3 { 4  5          Fu() 6  7          { 8  9                    super();10 11                    show();12 13                    return;14 15          }16 17  18 19          void show()20 21          {22 23                    System.out.println("fu show");24 25          }26 27 }28 29 class Zi extends Fu30 31 {32 33          int num = 8;34 35          Zi()36 37          {38 39                    super();40 41                    //-->通過super初始化父類內容時,子類的成員變數並未顯示初始化。等super()父類初始化完畢後,42 43                    //才進行子類的成員變數顯示初始化。44 45  46 47                    System.out.println("zi cons run...."+num);48 49                    return;50 51          }52 53          void show()54 55          {56 57                    System.out.println("zi show..."+num);58 59          }60 61 }62 63 class ExtendsDemo564 65 {66 67          public static void main(String[] args)68 69          {70 71                    Zi z = new Zi();72 73                    z.show();74 75          }76 77 }

 

 

 執行個體化圖解

1.4一個對象執行個體化過程:

 

一個對象執行個體化過程:

Person p = new Person();

1,JVM會讀取指定的路徑下的Person.class檔案,並載入進記憶體,

         並會先載入Person的父類(如果有直接的父類的情況下).

2,在堆記憶體中的開闢空間,分配地址。

3,並在對象空間中,對對象中的屬性進行預設初始化。

4,調用對應的建構函式進行初始化。

5,在建構函式中,第一行會先到調用父類中建構函式進行初始化。

6,父類初始化完畢後,在對子類的屬性進行顯示初始化。

7,在進行子類建構函式的特定初始化。

8,初始化完畢後,將地址值賦值給引用變數.

 

先預設初始化,再構造初始化,再顯示初始化

 

 

二、final關鍵字2.1 繼承弊端

打破封裝性

解決方案:在類前加final,不讓你繼承

 

2.2 final功能

final關鍵字:

1,final是一個修飾符,可以修飾類,方法,變數。

2,final修飾的類不可以被繼承。

3,final修飾的方法不可以被覆蓋。

4,final修飾的變數是一個常量,只能賦值一次。

         為什麼要用final修飾變數。其實在程式如果一個資料是固定的,

         那麼直接使用這個資料就可以了,但是這樣閱讀性差,所以它該資料起個名稱。

         而且這個變數名稱的值不能變化,所以加上final固定。

 

         寫法規範:常量所有字母都大寫,多個單詞,中間用_串連。

 

被final修飾的就成了最終的,肯定就不能被繼承了。

 

 

三、抽象類別

抽象類別:

抽象:籠統,模糊,看不懂!不具體。

 

特點:

1,方法只有聲明沒有實現時,該方法就是抽象方法,需要被abstract修飾。

         抽象方法必須定義在抽象類別中。該類必須也被abstract修飾。

2,抽象類別不可以被執行個體化。為什嗎?因為調用抽象方法沒意義。

3,抽象類別必須有其子類覆蓋了所有的抽象方法後,該子類才可以執行個體化。

         否則,這個子類還是抽象類別。

 

1,抽象類別中有建構函式嗎?

         有,用於給子類對象進行初始化。

 

2,抽象類別可以不定義抽象方法嗎?

         可以的。 但是很少見,目的就是不讓該類建立對象。AWT的配接器物件就是這種類。

         通常這個類中的方法有方法體,但是卻沒有內容。

 

         abstract class Demo

         {

                   void show1()

                   {}

                  

 

                   void show2()

                   {}

         }

 

3,抽象關鍵字不可以和那些關鍵字共存?

         private 不行

         static        不行

         final 不行

 

4,抽象類別和一般類的異同點。

         相同點:

                   抽象類別和一般類都是用來描述事物的,都在內部定了成員。

         不同:

                   1,一般類有足夠的資訊描述事物。

                      抽象類別描述事物的資訊有可能不足。

                   2,一般類中不能定義抽象方法,只能定非抽象方法。

                      抽象類別中可定義抽象方法,同時也可以定義非抽象方法。

                   3,一般類可以被執行個體化。

                      抽象類別不可以被執行個體化。

 

5,抽象類別一定是個父類嗎?

         是的。因為需要子類覆蓋其方法後才可以對子類執行個體化。

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.