Java-抽象類與接口

抽象類與接口

抽象類和接口似乎在功能上沒什么區別,主要作用都是為了規范類的行為。然而,既然同時存在這兩種概念,那必然有其不同之處。

抽象類

什么是抽象類?用abstract關鍵字修飾的類即為抽象類。其特點是不能創建類的對象,可以包含抽象方法和非抽象方法,抽象方法同樣用abstract關鍵字修飾,且不可以有方法的實現。而衍生類中必須實現抽象方法。

上代碼:
抽象類
public abstract class CoderClass { protected void normalMethod(){ System.out.println("我是抽象類的一般方法"); } //抽象方法不能具體實現 protected abstract void codeSkill(); }

衍生類
public class JavaClass extends CoderClass { //非抽象方法可重寫可不重寫 //抽象方法必須實現 protected void codeSkill() { System.out.println("我會用Java搬磚"); } } public class JavascriptClass extends CoderClass { //非抽象方法可重寫可不重寫 //抽象方法必須實現 protected void codeSkill() { System.out.println("我會用JavaScript搬磚"); } }

接口

什么是接口?接口可以看作是抽象類的延伸,接口完全禁止方法的實現,僅僅是聲明方法。

上代碼:
接口
public interface ISkill { public void english(); }

實現接口類
public class HrClass implements ISkill { public void english() { System.out.println("我是hr,我會英語"); } } public class CoderClass implements ISkill { public void english() { System.out.println("我是程序猿,我也會英語"); } }

二者的區別

抽象類與接口主要的區別在于使用的情景上,抽象類是同類型對象的行為抽象,接口是不同類型對象的相同行為抽象。并且對于抽象類是采取繼承的方式來使用,為單繼承,而對于接口來說則是可以同時接入多個接口的。

例如代碼中的例子,對于程序員這一類人來說,都具備編碼能力,但是程序員有因為有人是用Java,有人是用Javascript等等不同的語言編碼。所以可以將程序員看作抽象類,而編碼能力作為抽象方法。Java程序員,Javascript程序員為衍生類,而用Java或Javascript編碼的能力作為抽象方法的實現。

再例如,對于程序員和Hr這兩類人來說,雙方的工作不同,但是都具備有英語能力,而雙方的英語側重點有有所不同。所以我們將英語能力抽象稱為接口方法,不同類的人均可以具備此能力。

ps:以上為個人見解,如果對讀者能有所幫助那真是榮幸之至。如有錯誤,疏漏之處歡迎批評指正,謝謝。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 1. Java基礎部分 基礎部分的順序:基本語法,類相關的語法,內部類的語法,繼承相關的語法,異常的語法,線程的語...
    子非魚_t_閱讀 31,738評論 18 399
  • Spring Cloud為開發人員提供了快速構建分布式系統中一些常見模式的工具(例如配置管理,服務發現,斷路器,智...
    卡卡羅2017閱讀 134,836評論 18 139
  • 對于面向對象編程來說,抽象是它的一大特征之一。在Java中,可以通過兩種形式來體現OOP的抽象:接口和抽象類。接口...
    Q南南南Q閱讀 377評論 0 3
  • 小編費力收集:給你想要的面試集合 1.C++或Java中的異常處理機制的簡單原理和應用。 當JAVA程序違反了JA...
    八爺君閱讀 4,650評論 1 114
  • 不知不覺,mac 的磁盤被占滿了 。 用命令查看 du -sh * 發現,占用最大的幾個文件夾 。 14G com...
    IDO老徐閱讀 7,333評論 1 2