java抽象類別與抽象方法是什麼?
在類別的繼承中,如果一個個新的子類別被定義,子類別變得越來越具體,父類別變得更加一般和通用,類別的設計應該保證父子類能夠共享特徵,有時將父類設計得非常抽象,使得父類沒有具體的實例,這樣的類叫做抽象類;一般當我們設計一個類,不需要創建此類的實例時,可以考慮將類別設定成抽象類,讓其子類別實作這個類別的抽象方法
#抽象類別(abstract class)
用abstract 關鍵字來修飾一個類別時,這個類別叫作抽象類別。抽象類別是它的所有子類別的公共屬性的集合,是包含一個或多個抽象方法的類別。
抽象類別可以看作是對類別的進一步抽象。在物件導向領域,抽象類別主要用來進行類型隱藏。
抽象類別的特徵:
( 1 ) 不可被實例化
(2)抽象類別是有建構器的(所有類別都有建構器)
(3)抽象方法所在的類,一定是抽象類別(因為抽象方法是沒有方法體的,如果所在的類別不是抽象類,那麼該類別可以實例化對象,呼叫抽象方法,然後無方法體去具體實作功能,則矛盾)
(4)抽象類別可以沒有抽象方法的
//抽象类 abstract class Person { String name; public Person(){}//抽象类的构造方法 public abstract void dink();//抽象方法,无{}方法体 public void eat(){ //非抽象方法 }; } class Student extends Person{ @Override public void eat() { System.out.println("吃饭"); } @Override public void dink() { System.out.println("喝水"); } }
抽象方法(abstract method)
abstract修飾的方法為抽象方法,所有的抽象方法都必須存在於抽象類別中。
在抽象類別中定義的方法稱為抽象方法,這些方法只有方法頭的聲明,而用一個分號來取代方法體的定義,即只定義成員方法的介面形式,而沒有具體操作。
抽象方法的特徵:
(1)格式,沒有方法體,包括{ },例如 public abstract void dink();
(2)抽象方法只保留方法的功能,具體的執行,交給繼承抽象類別的子類,由子類別重寫改抽象方法
(3)如果子類別繼承抽象類,並重寫了父類別的所有的抽象方法,則此子類別不是抽象類,可以實例化的
(4)如果子類別繼承抽象類,沒有重寫父類別中所有的抽象方法,意味著子類別中還有抽象方法,那麼此子類別必須必須宣告為抽象的。
上面的範例中,Student子類別繼承抽象父類,自重寫了eat()抽象方法,沒有重寫drink()抽象方法,會報錯,解決方法是把drink()方法也重寫了,或是把Student也變成抽象類別
#抽象類別的使用場景
##抽象類別一般在運用多態時,比較適用以上是知道java抽象類別與抽象方法是什麼嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!