java abstract

參考
java抽象類和抽象方法
Android開發:抽象類(abstract class)和接口(Interface)的區別
Java基礎篇(一):接口與抽象類
java抽象類和接口的區別,使用場景

如果我們進行一個圖形編輯軟件的開發,就會發現問題領域存在著圓、三角形這樣一些具體概念,它們是不同的,但是它們本質上又都屬于這樣一個概念:形狀,形狀這個概念在問題領域是不存在的,所以形狀就是一個圓形、三角形的抽象類。正是因為抽象的概念在問題領域沒有對應的具體概念,所以用以表征抽象概念的抽象類是不能實例化的。
你可以直接使用普通類來實現同樣的邏輯,但是,讓具體的實現方法和類抽象化,你可以清晰的告訴使用者這個類不能直接使用,它應該作為基類,然后讓子類來實現抽象方法。(模板方法設計模式)

抽象類有點類似“模板”的作用,目的是根據其格式來創建和修改新的類。對象不能由 抽象類直接創建,只可以通過抽象類派生出新的子類,再由其子類來創建對象。當一個類被聲明為抽象類時,要在這個類前面加上修飾符abstract。

在抽象類中的成員方法可以包括一般方法和抽象方法。抽象方法就是以abstract修飾的方法,這種方法只聲明返回的數據類型、方法名稱和所需的參數,沒 有方法體,也就是說抽象方法只需要聲明而不需要實現。當一個方法為抽象方法時,意味著這個方法必須被子類的方法所重寫,否則其子類的該方法仍然是 abstract的,而這個子類也必須是抽象的,即聲明為abstract。

abstract class Animal//定義抽象類
{
   String str;
   Animal(String s)//定義抽象類的一般方法
   { 
     str=s;
   }
   abstract void eat();//定義抽象方法
}

class Horse extends Animal//定義繼承Animal的子類
{
   String str;
   Horse(String s)
   {
      super(s);//調用父類的構造方法
   }
   void eat()//重寫父類的抽象方法
   {      
      System.out.println("馬吃草料!");
   }
}

抽象類方式中,抽象類可以擁有任意范圍的成員數據,同時也可以擁有自己的非抽象方法,但是接口方式中,它僅能夠有靜態、不能修改的成員數據(即final static,但是我們一般是不會在接口中使用成員數據),同時它所有的方法都必須是抽象的。在某種程度上來說,接口是抽象類的特殊化。

從設計的層面來看,我覺得抽象類與接口有如下幾個不同點:

  • 抽象層次不同。可以這樣理解,抽象類是對類的抽象,接口是對行為的抽象。抽象類對是類整體進行抽象,包括屬性、行為,而接口是對類局部(行為)進行抽象。
  • 跨域不同。抽象類所跨域的是具有相似特點的類,而接口可以跨域不同的類。抽象類所體現的是一種繼承關系,要想使得繼承關系合理,父類和派生類之間必須存在"is-a" 關系,即父類和派生類在概念本質上應該是相同的。對于接口則不然,并不要求接口的實現者和接口定義在概念本質上是一致的, 僅僅是實現了接口定義的契約而已。
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 1. Java基礎部分 基礎部分的順序:基本語法,類相關的語法,內部類的語法,繼承相關的語法,異常的語法,線程的語...
    子非魚_t_閱讀 31,766評論 18 399
  • 本文出自 Eddy Wiki ,轉載請注明出處:http://eddy.wiki/interview-java.h...
    eddy_wiki閱讀 1,227評論 0 5
  • 1.import static是Java 5增加的功能,就是將Import類中的靜態方法,可以作為本類的靜態方法來...
    XLsn0w閱讀 1,267評論 0 2
  • 你很清楚的知道什么時候用抽象類,什么時候用接口么?p.s. 多文字預警! 1 抽象類和接口簡介 1.1 抽象類 ...
    Sharember閱讀 2,379評論 9 55
  • 面向對象主要針對面向過程。 面向過程的基本單元是函數。 什么是對象:EVERYTHING IS OBJECT(萬物...
    sinpi閱讀 1,091評論 0 4