一.為什麼要使用介面
假如有一個需求:要求實現防盜門的功能。門有"開"和"關"的功能,鎖有"上鎖"和"開鎖"的功能。
分析:首先防盜門是一個門,門有開門和關門的功能,還有一把鎖,鎖有開鎖和上鎖,按照物件導向的編程的思想,我們會將門和鎖都作為一個類而單獨存在,但是,不能讓防盜門繼承自門的同時又繼承自鎖,防盜門不是鎖,不符合繼承中is a的關係,在java中支援單繼承。那麼我們如何來解決這一問題,這時就要用到介面。
二.什麼是介面
在軟體中介面是一種規範和標準,他們可以約束類的行為,是一些方法特徵的集合,但是沒有方法的實現,介面其實上也可以看做是一個特殊的抽象類別,但是採用和抽象類別完全不同的方法來表示,兩者的設計理念也是不同的,抽象類別有利於代碼複用,介面利於代碼的擴充和維護。
三.抽象類別和介面的區別:
01抽象類別可以提供成員方法的實現細節,而介面中只能存在public abstract 方法;
02.抽象類別中的成員變數可以是各種類型的,而介面中的成員變數只能是public static final類型的;
03.介面中不能含有靜態代碼塊以及靜態方法,而抽象類別可以有靜態代碼塊和靜態方法;
04.一個類只能繼承一個抽象類別,而一個類卻可以實現多個介面。
四.如何定義介面
首先先來看一下文法:
[修飾符] interface 介面名 extends 父介面1,父介面2,...
{
//常量定義
//方法定義
}
在一個類中實現介面文法:
class 類名 父類名 implements 介面1,介面2,.....
{
//類成員
}
五.定義介面注意點
01.介面的命名規則與類相同,如果修飾符是public ,則該介面在整個項目中可見;如果省略修飾符,則該介面只在當前包中可見。
02.介面中可以定義常量,不能定義變數,如果你在介面中定義屬性,那麼通過反編譯可以看見他會自動用public static final 修飾,介面中的屬性都是全域靜態常量,介面中的常量必須在定義時指定初始值。
03.介面中所有的方法都是抽象方法,介面中方法都會自動用public abstract 修飾,即介面中只有全域抽象方法。
04.介面不能執行個體化,介面中不能有構造。
05介面之間可以通過extends實現繼承關係,一個介面可以繼承多個介面,但介面不能繼承類。
06.介面的實作類別必須實現介面的全部方法,否則必須定義為抽象類別。