天天看點

Java面向對象之接口

内容:

1、接口的概念與定義

2、類實作接口

3、接口的特點

4、接口和抽象類的差別

(1)類和接口

類:具有相同屬性和功能的事物集合

接口:接口是功能的集合,也就是方法的集合,也就是說接口中隻能定義方法,不能定義普通的成員變量

而且接口中的成員方法必須都是抽象的,可以了解接口是比抽象類更加抽象的一種類

(2)接口的定義

定義類的關鍵字:class

定義抽象類的關鍵字:abstract

定義接口的關鍵字:interface

定義接口所在的仍為.java檔案,雖然聲明時使用的為interface關鍵字的編譯後仍然會産生.class檔案,

這點可以讓我們将接口看做是一種隻包含了功能聲明的特殊類

格式如下:

1 public interface 接口名{
2       // 成員變量: 不能定義普通的成員變量
3       // 成員方法: 必須都是抽象
4       public abstract 傳回值類型 方法名();
5 }      

使用interface代替了原來的class,其他步驟與定義類相同:

  • 接口中的方法均為公共通路的抽象方法
  • 接口中無法定義普通的成員變量

(3)各種類型之間的關系

  • 類和類之間:繼承,隻能是單繼承,一個子類隻能有一個父類
  • 接口和接口之間:繼承,可以多繼承,一個子接口可以有多個直接父接口
  • 類和接口之間:不叫繼承,叫實作(implements),可以多實作,一個類可以實作多個接口

類與接口的關系為實作關系,即類實作接口。實作的動作類似繼承,隻是關鍵字不同,實作使用implements

其他類(實作類)實作接口後,就相當于聲明:”我應該具備這個接口中的功能”。實作類仍然需要重寫方法以實作具體的功能

格式:

1 class 實作類 implements 接口 {
2     // 重寫接口中所有方法
3 }       

在類實作接口後,該類就會将接口中的抽象方法繼承過來,此時該類需要重寫該抽象方法,完成具體的邏輯

  • 接口中定義功能,當需要具有該功能時,可以讓類實作該接口,隻聲明了應該具備該方法,是功能的聲明
  • 在具體實作類中重寫方法,實作功能,是方法的具體實作

于是,通過以上兩個動作将功能的聲明與實作分開,此時請思考:類是現實事物的描述,接口是功能的集合

接口中成員的特點如下:

  • 接口中可以定義成員變量,但是變量必須用public static final修飾(固定修飾符),這樣的變量其實是常量,其值不能改變
  • 接口中可以定義方法,方法也有固定的修飾符,public abstract
  • 接口不可以建立對象(抽象類也不可以建立對象)
  • 實作類必須覆寫掉接口中所有的抽象方法後,實作類才可以執行個體化。否則實作類是一個抽象類

示例代碼:

1 // 接口
2 public interface MyInter {
3     // 接口的成員變量(常量)
4     public static final int a = 3;
5     // 接口的方法
6     public abstract void show();
7 }      

注:固定修飾符可以不寫也可以按心情想寫哪個寫哪個,但是不寫不代表沒有,不寫時編譯器會自動添加

在開發中最常用的模式:

1 // 一個類繼承一個抽象類 同時實作多個接口
2 public class A extends AbstractClassB implements 接口A, 接口B{
3 
4 }      

注:A中必須重寫抽象類中的抽象方法以及所有接口中的抽象方法!

接口的特點:

  • 接口可以繼承接口  A接口繼承B接口後,A接口便擁有了A、B兩個接口中所有的抽象方法
  • Java支援一個類同時實作多個接口,或一個接口同時繼承多個接口
  • 類可以在繼承一個類的同時,實作多個接口
  • 接口與父類的功能可以重複,均代表要具備某種功能,并不沖突

相同點:

  • 都位于繼承的頂端,用于被其他類實作或繼承
  • 都不能直接執行個體化對象
  • 都可以包含抽象方法,其子類都必須覆寫重寫或實作這些抽象方法

差別:

  • 抽象類為部分方法提供實作,避免子類重複實作這些方法,提高代碼重用性;
  • 接口隻能包含抽象方法,而抽象類可以包含抽象方法也可以包含普通方法;
  • 一個類隻能繼承一個直接父類(可能是抽象類),卻可以實作多個接口;(接口彌補了Java的單繼承)
  • 抽象類為繼承體系中的共性内容,接口為繼承體系外的擴充功能

二者的選用:

  • 優先選用接口,盡量少用抽象類
  • 需要定義子類的行為,又要為子類提供共性功能時才選用抽象類

too young too simple sometimes native!