從屌絲到架構(gòu)師的飛越(面向?qū)ο笃?接口

一、介紹

Java接口是一系列方法的聲明,是一些方法特征的集合,一個接口只有方法的特征沒有方法的實現(xiàn),因此這些方法可以在不同的地方被不同的類實現(xiàn),而這些實現(xiàn)可以具有不同的行為(功能)。

兩種含義:一,Java接口,Java語言中存在的結(jié)構(gòu),有特定的語法和結(jié)構(gòu);二,一個類所具有的方法的特征集合,是一種邏輯上的抽象。前者叫做“Java接口”,后者叫做“接口”。

接口實現(xiàn)和類繼承的規(guī)則不同,為了數(shù)據(jù)的安全,繼承時一個類只有一個直接父類,也就是單繼承,但是一個類可以實現(xiàn)多個接口,接口彌補了類的不能多繼承缺點,繼承和接口的雙重設計既保持了類的數(shù)據(jù)安全也變相實現(xiàn)了多繼承。

Java接口本身沒有任何實現(xiàn),因為Java接口不涉及表象,而只描述public行為,所以Java接口比Java抽象類更抽象化。但是接口不是類,不能使用new 運算符實例化一個接口。如 x=new comparable(......);//這個是錯誤來的。但是可以聲明接口變量Comparable x; //這是允許的。

Java接口的方法只能是抽象的和公開的,Java接口不能有構(gòu)造器,Java接口可以有public、static和final屬性。即接口中的屬性可以定義為 public static final int value=5;[1]

接口把方法的特征和方法的實現(xiàn)分割開來。這種分割體現(xiàn)在接口常常代表一個角色,它包裝與該角色相關(guān)的操作和屬性,而實現(xiàn)這個接口的類便是扮演這個角色的演員。一個角色由不同的演員來演,而不同的演員之間除了扮演一個共同的角色之外,并不要求其它的共同之處。

二、知識點介紹

1、基本概念

2、接口使用

3、接口的實際應用

三、上課對應視頻的說明文檔

1、基本概念

接口(Interface),在JAVA編程語言中是一個抽象類型,是抽象方法的集合。接口通常以interface來聲明。一個類通過繼承接口的方式,從而來繼承接口的抽象方法。

如果一個類只由抽象方法和全局常量組成,那么這種情況下不會將其定義為一個抽象類。只會定義為一個接口,所以接口嚴格的來講屬于一個特殊的類,而這個類里面只有抽象方法和全局常量,就連構(gòu)造方法也沒有。

范例:定義一個接口

interface A{//定義一個接口

public static final String MSG = "hello";//全局常量

public abstract void print();//抽象方法

}

2、接口使用

(1)由于接口里面存在抽象方法,所以接口對象不能直接使用關(guān)鍵字new進行實例化。接口的使用原則如下:

A、接口必須要有子類,但此時一個子類可以使用implements關(guān)鍵字實現(xiàn)多個接口;

B、接口的子類(如果不是抽象類),那么必須要覆寫接口中的全部抽象方法;

C、接口的對象可以利用子類對象的向上轉(zhuǎn)型進行實例化。

案例1:

interface A{//定義一個接口A

public static final String MSG = "hello";//全局常量

public abstract void print();//抽象方法

}

interface B{//定義一個接口B

public abstract void get();

}

class X implements A,B{//X類實現(xiàn)了A和B兩個接口

@Override

public void print() {

System.out.println("接口A的抽象方法print()");

}

@Override

public void get() {

System.out.println("接口B的抽象方法get()");

}

}

public class TestDemo {

public static void main(String[] args){

X x = new X();//實例化子類對象

A a = x;//向上轉(zhuǎn)型

B b = x;//向上轉(zhuǎn)型

a.print();

b.get();

}

}

(2)對于子類而言,除了實現(xiàn)接口外,還可以繼承抽象類。若既要繼承抽象類,同時還要實現(xiàn)接口的話,使用一下語法格式:

class 子類 [extends 父類] [implemetns 接口1,接口2,...] {}

案例2:

interface A{//定義一個接口A

public static final String MSG = "hello";//全局常量

public abstract void print();//抽象方法

}

interface B{//定義一個接口B

public abstract void get();

}

abstract class C{//定義一個抽象類C

public abstract void change();

}

class X extends C implements A,B{//X類繼承C類,并實現(xiàn)了A和B兩個接口

@Override

public void print() {

System.out.println("接口A的抽象方法print()");

}

@Override

public void get() {

System.out.println("接口B的抽象方法get()");

}

@Override

public void change() {

System.out.println("抽象類C的抽象方法change()");

}

}

(3)在Java中,一個抽象類只能繼承一個抽象類,但一個接口卻可以使用extends關(guān)鍵字同時繼承多個接口(但接口不能繼承抽象類)。

interface A{

public void funA();

}

interface B{

public void funB();

}

//C接口同時繼承了A和B兩個接口

interface C extends A,B{//使用的是extends

public void funC();

}

class X implements C{

@Override

public void funA() {

}

@Override

public void funB() {

}

@Override

public void funC() {

}

}

由此可見,從繼承關(guān)系來說接口的限制比抽象類少:

A、一個抽象類只能繼承一個抽象父類,而接口可以繼承多個接口;

B、一個子類只能繼承一個抽象類,卻可以實現(xiàn)多個接口(在Java中,接口的主要功能是解決單繼承局限問題)

(4)從接口的概念上來講,接口只能由抽象方法和全局常量組成,但是內(nèi)部結(jié)構(gòu)是不受概念限制的,正如抽象類中可以定義抽象內(nèi)部類一樣,在接口中也可以定義普通內(nèi)部類、抽象內(nèi)部類和內(nèi)部接口(但從實際的開發(fā)來講,用戶自己去定義內(nèi)部抽象類或內(nèi)部接口的時候是比較少見的),范例如下,在接口中定義一個抽象內(nèi)部類:

interface A{

public void funA();

abstract class B{//定義一個抽象內(nèi)部類

public abstract void funB();

}

}

在接口中如果使用了static去定義一個內(nèi)接口,它表示一個外部接口:

interface A{

public void funA();

static interface B{//使用了static,是一個外部接口

public void funB();

}

}

class X implements A.B{

@Override

public void funB() {

}

}

3、接口的實際應用(標準定義)

在日常的生活之中,接口這一名詞經(jīng)常聽到的,例如:USB接口、打印接口、充電接口等等。

如果要進行開發(fā),要先開發(fā)出USB接口標準,然后設備廠商才可以設計出USB設備。

現(xiàn)在假設每一個USB設備只有兩個功能:安裝驅(qū)動程序、工作。

案例:

定義一個USB的標準:

interface USB {? // 操作標準? ? ?

public void install() ;

public void work() ;

}

在電腦上應用此接口:

class Computer {

public void plugin(USB usb) {

usb.install() ;

usb.work() ;

}

}

定義USB設備—手機:

class Phone implements USB {

public void install() {

System.out.println("安裝手機驅(qū)動程序。") ;

}

public void work() {

System.out.println("手機與電腦進行工作。") ;

}

}

定義USB設備—打印機:

class Print implements USB {

public void install() {

System.out.println("安裝打印機驅(qū)動程序。") ;

}

public void work() {

System.out.println("進行文件打印。") ;

}

}

定義USB設備—MP3:

class MP3 implements USB {

public void install() {

System.out.println("安裝MP3驅(qū)動程序。") ;

}

public void work() {

System.out.println("進行MP3拷貝。") ;

}

}

測試主類:

public class TestDemo {

public static void main(String args[]) {

Computer c = new Computer() ;

//傳遞具體的USB設備進接口

c.plugin(new Phone()) ;

c.plugin(new Print()) ;

c.plugin(new MP3());

}

}

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容