首頁 > Java > java教程 > 主體

Java特性總結

巴扎黑
發布: 2017-07-21 14:17:24
原創
1301 人瀏覽過

1.繼承(關鍵字:extends):(子父類別)
  1.提高程式碼的複用性。
  2.讓類別與類別之間產生了關係。有了這個關係,才有了多態的特性。

1.1變數
  如果子父類別中出現非私有的(private)同名成員變數時,子類別要存取本類別中的變量,用this,子類別要存取父類別中的同名變量,用super。
  super的使用和this使用幾乎一致。
  this代表的是本類別物件的參考。
  super代表的父類別物件的參考。

1.2 子父類別中的函數
  當子類別出現和父類別一模一樣的函數時,
  當子類別物件呼叫函數,就會執行子類別函數的內容。如同父類別的函數被覆蓋一樣。

  這種情況是函數的另一個特性:重寫(覆蓋)

  當子類繼承父類,沿襲了父類的功能,到子類中,但是子類雖具備該功能,但是功能的內容卻和父類不一致,這時,沒有必要定義新功能,而是使用覆蓋特性,保留父類的功能定義,並重寫功能內容。

覆寫注意事項:
  1.子類別覆寫父類,必須保證子類別權限大於等於父類權限,才可以覆寫,否則編譯失敗。 (不寫權限修飾符則是預設權限,介於private和public之間。)
  2.靜態只能覆寫靜態。

重載與重寫:
  重載:只看同名函數的參數清單。
  重寫:子父類別中的方法名稱和傳回型別要一模一樣。 (即:傳回型別  方法名稱() 要一樣)

#1.3 子類別中的建構子。
  在對子類別物件進行初始化時,父類別的建構子也會運行,那是因為子類別的建構子預設第一行有一條隱式的語句super();

為什麼子類別一定要存取父類別中的建構子。
  因為父類別中的資料子類別可以直接取得,所有子類別物件在建立時,需要先查看父類別是如何對資料進行初始化的。所以子類別在物件初始化時,要先存取一下父類別中的建構子。如果要存取父類別中指定的建構函數,可以透過手動定義super語句的方式來指定。

注意:super語句一定要定義在子類別建構子的第一行。


結論:
  子類別的所有的建構函數,預設都會存取父類別中空參數的建構子。
  因為子類別每一個建構子內的第一行都會有一句隱式super();
  當父類別中沒有空參數的建構子時,子類別必須手動透過super語句形式來指定要存取父類別中的建構子。
  當然:子類別的建構子第一行也可以手動指定this語句來存取本類別中的建構子。子類別中至少會有一個建構函式會存取父類別中的建構子。 (因為this()和super()都只能放在建構子的第一行,所以在建構函式中只能存在其中一個。)


注意:千萬不要為了取得其他類別的功能,簡化程式碼而繼承。必須是類別與類別之間有所屬關係才可以繼承。所屬關係 is  a 。
2.final:最終。作為一個修飾符。
2.1 可以修飾類,函數,變數。
2.2 被final修飾的類別不可以被繼承。為了避免被繼承,避免被子類別重寫功能。
2.3 被final修飾的方法不能被重寫
2.4 被final修飾的變數是常數只能賦值一次,既可以修飾成員變量,也可以修飾局部變數。當描述事物時,一些資料的出現,值是固定的,那麼這時為了增強閱讀性,都會給這些值取個名字。方便閱讀。而這個值不需要改變,所以加上final修飾。 作為常數:常數的書寫規範所有字母都大寫,如果由多個單字組成。字間通過_連接。 (eg: final    double PI = 3.14; final int SET_ON = 1;)
2.5 內部類別定義在類別中的局部位置上時,只能存取該局部被final修飾的局部變數。

3. 抽象:
3.1 抽象方法一定在抽象類別中。
3.2抽象方法和抽象類別都必須被 abstract關鍵字修飾。 (abstract class 類別名稱 { abstract void 方法名稱(); })
3.3抽象類別不可以用new建立物件。因為呼叫抽象方法沒意義。
3.4 抽象類別中的抽象方法要被使用,必須由子類別重寫其所有的抽象方法後,建立子類別物件呼叫。如果子類別只覆寫了部分抽象方法,那麼該子類別還是一個抽象類別。
一般類別和抽象類別的異同:抽象類別和一般類別沒有太大的不同。該如何描述事物,就如何描述事物,只不過,該事物出現了一些看不懂的東西。這些不確定的部分,也是該事物的功能,需要明確出現。但是無法定義主體。透過抽象方法來表示。
抽象類別比一般類別多了個抽象函數。就是在類別中可以定義抽象方法。
抽象類別不可以實例法。
特殊:抽象類別中可以不定義抽象方法,這樣做只是不讓該類別建立物件。
4. 模版設計模式:
  在定義功能時,功能的一部分是確定的,但是有一部分是不確定,而確定的部分在使用不確定的部分,那麼這時就將不確定的部分暴露出去。由該類別的子類別去完成。
5.介面:
  初期理解,可以認為是一個特殊的抽象類別。當抽象類別中的方法都是抽象的(abstract),那麼該類別可以透過介面的形式來表示。
  class :用來定義類別
  interface:用來定義介面。介面也是一種類別。可以產生class檔案。

介面定義時,格式特性:
  1.介面中常見定義:常數,抽象方法。介面的出現將「多重繼承」透過另一種形式體現出來,即「多重實現」。
  2.介面中的成員都有固定修飾符。
  常數:public static final
  方法:public abstract
  記住:介面中的成員都是public的。
  介面:是不可以建立物件的,因為有抽象方法(abstract)。需要被子類別實現,子類別對介面中的抽象方法全都重寫後,子類別才可以實例化。否則子類別是一個抽象類別。
  eg: interface Inter
  {
    //public static final 和public abstract修飾符缺少也可以,因為介面中的成員都有固定修飾符。但是開發中最好寫,增強閱讀性。
    public static final int SET_ON = 1;
    public abstract void show();
  }
 ////使用介面使用介面卡 鐵>  public void show (){} //需要重寫抽象方法show,才能建立物件
  }
  class InterfaceDemo
  {
    public static void main(String[] args)#   public static v t = new Test();
      System.out.println(t.SET_ON);

    }

  }

##」介面的特徵:

                 對外暴露的規則。

  介面是程式的功能擴充。

  介面可以用來多實作。

  類別與介面之間是實作關係,而且類別可以繼承一個類別的同時實作多個介面。
介面與介面之間可以有繼承關係。
6.多態:
  定義:某一類事物的多種存在形態。
  eg:動物中貓、狗
  貓這個物件對應的類型是貓類型
  貓x = new 貓();
  同時貓也是動物中的一種,也可以把貓稱為動物。
  動物 y = new 貓();
  動物是貓和狗具體事物中抽取出來的父類型。
  父類型參考指向了子類型物件。
6.1.多態的體現:
  父類別的參考指向了自己的子類別物件。
  父類別的參考也可以接收自己的子類別物件。
  eg: 父類別  父類別引用名稱 = new 子類別();//類型提升。向上轉型。要使用子類別特有功能,需要向下轉型:子類別  新子類別參考名稱= (子類別)原父類別引用名稱
  關鍵字: instanceof 判斷參考類型
    eg: if (a instanceof Cat) //判斷a是不是貓型。
6.2.多態的前提:
   必須是類別與類別之間有關係。要么繼承,要么實現。
  通常還有一個前提:子類別必須覆寫(重寫)。

6.3.多態的好處:
  多態的出現大大的提高了程式的擴展性。
6.4.多態的弊端:

  提高了擴充性,但是只能使用父類別的參考來存取父類別中成員。

6.5在多態中非靜態成員函數的特點:
  在編譯期間:參閱引用型變數所屬的類別中是否有呼叫的方法。如果有,編譯通過,如果沒有,編譯失敗。
  在運行時期:參考物件所屬的類別中是否有呼叫的方法。
  簡單總結就是:成員函數在多型呼叫時,編譯看左邊,運行看右邊。
6.6在多態中成員變數的特性:
  無論編譯和執行,都參考左邊(引用型變數所屬的類別。)
  在多態中靜態成員函數的特性:
    無論編譯和運行,都參考左邊(static本身就可以直接呼叫)。

7.object:是所有物件的直接或間接父類,傳說中的上帝。
  該類別中定義的肯定是所有物件都具備的功能。
  內部類別的存取規則:
    1.內部類別可以直接存取外部類別中的成員,包括私有。
    2.外部類別要存取內部類別,必須建立內部類別物件。

以上是Java特性總結的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板