/*********************************什么是接口*************************/
//1、硬件接口:指的是兩個(gè)硬件設(shè)備之間的連接方式,硬件接口既包括物理上的接口,還包括邏輯上的數(shù)據(jù)傳送協(xié)議
//2、軟件接口:程序代碼,特殊的類,表示一種范圍,(java中)是具有的N個(gè)方法的特征集合
//eg:在封裝之前 顯示器封裝了很多電子元件 最終向外報(bào)漏的數(shù)據(jù)交互的孔-->接口 (為了實(shí)現(xiàn)設(shè)備和設(shè)備之間的橋梁)
// 在java中,接口表示一種規(guī)范的/約束/要求實(shí)現(xiàn)者必須遵循該規(guī)范:用來(lái)約束使用者該怎么做
//硬件當(dāng)中的USB就是一個(gè)接口的抽象概念,
//定義:接口只是定義了類的應(yīng)當(dāng)遵循的規(guī)范,卻不關(guān)心這些類的內(nèi)部數(shù)據(jù)和其功能的實(shí)現(xiàn)細(xì)節(jié),站在程序的角度上說(shuō),接口只規(guī)定了類必須好提供的方法,從而分離了規(guī)范和實(shí)現(xiàn),增強(qiáng)了系統(tǒng)的拓展性和可維護(hù)性。
/*********************************面向?qū)ο蟮木幊?************************/
//接口和實(shí)現(xiàn)類體現(xiàn)了真正的多態(tài)
/*********************************java中的接口*************************/
//專家:多個(gè)抽象類的抽象就是接口 (其實(shí)接口就是抽象類的一種 在.java文件反編譯的class文件當(dāng)中我們可以看到 interface IWalkable == abstract interface IWalkable)
//在java中最小的程序單元就是類 接口就是一個(gè)特殊的類 、java中的接口表示規(guī)范,用于定義一組抽象方法,要求實(shí)現(xiàn)類必須實(shí)現(xiàn)該方法并提供方法實(shí)現(xiàn)
//定義類語(yǔ)句:[pubilc] class 類名{}
//定義類語(yǔ)句:[pubilc] interface 接口名{};在這里還沒(méi)考慮接口的父接口等等**
//接口起名問(wèn)題:表示具有某些能力的,有人習(xí)慣以able/handler結(jié)尾 有的公司或者個(gè)人習(xí)慣以i打頭,表示接口。
/*********************************java中的接口需要的成員*************************/
//1、接口中沒(méi)有構(gòu)造器 ,推論L接口是不能new的 (不能創(chuàng)建對(duì)象) 接口中不能定義普通方法
//2、接口中定義的成員變量 實(shí)質(zhì)是全局靜態(tài)常量 默認(rèn)是public static final 來(lái)修飾
//3、接口中定義的方法都是公共的抽象方法 默認(rèn)使用public abstract 來(lái)修飾方法 (就像在下面的 IWalkable 中 里面void walk();就等同于 public abstract void walk(); )
//4、接口中的定義內(nèi)部類 都是公共的靜態(tài)內(nèi)部類 使用public static 來(lái)修飾內(nèi)部類
/*********************************常量接口*************************/
// 常量接口:有人喜歡使用接口來(lái)封裝多個(gè)常量信息 我們稱之為常量接口 其目和常量類相同(不推薦)
// 標(biāo)志接口:接口中沒(méi)有任何成員,就僅僅是一個(gè)接口的定義,就是一個(gè)標(biāo)志,其他的類實(shí)現(xiàn)該接口,就屬于該家族,我們可以通過(guò)第三方代碼賦值該接口實(shí)現(xiàn)類特殊的功能(不推薦)
//咱們使用的方法 主要包含了抽象方法
/*********************************接口特點(diǎn)*************************/
//接口不存在構(gòu)造方法 也不能顯示定義構(gòu)造器 不能實(shí)例化 不能new
//接口只能繼承接口 不能繼承類 且接口支持多繼承(類是單繼承關(guān)系) ----> [修飾符]interface 接口名字 extends 接口1 接口2
//接口里面的方法全是抽象的 默認(rèn)修飾符是 public abstract
//接口里面的字段全是全局靜態(tài)常量 默認(rèn)修飾符是 public static fianl
//接口里面內(nèi)部類全是公共的靜態(tài)的,默認(rèn)修飾符是public static
/*********************************接口的實(shí)現(xiàn)者就是:實(shí)現(xiàn)類*************************/
//接口僅僅只是定義了某些事物應(yīng)有的功能,但是并沒(méi)有提供實(shí)現(xiàn) 此時(shí),我們需要提供實(shí)現(xiàn)類去實(shí)現(xiàn)接口 并覆蓋 接口中的方法 從而實(shí)現(xiàn)類接口定義的功能
/*********************************類實(shí)現(xiàn)接口的語(yǔ)法 *************************/
//[修飾符] class 類名 extends 父類 implement 接口1 接口2 {} (語(yǔ)法:一個(gè)類可以實(shí)現(xiàn)多個(gè)接口,從而禰補(bǔ)了類的單繼承關(guān)系)
/*********************************繼承關(guān)系*************************/
//類和類之間存在繼承關(guān)系:使用extends來(lái)表示
//接口和接口之間只能是繼承關(guān)系:使用extends來(lái)表示
//接口和實(shí)現(xiàn)類之間只能是實(shí)現(xiàn)關(guān)系(繼承關(guān)系):使用implements來(lái)表示 (接口是實(shí)現(xiàn)類的父類,)
//-----> 接口變量 == 創(chuàng)建實(shí)現(xiàn)類對(duì)象 (體現(xiàn)了多態(tài)思想)
// 接口和實(shí)現(xiàn)類的多態(tài)關(guān)系才是我們今后見(jiàn)的最多的
// 下方定義類Cat要是想實(shí)現(xiàn)接口當(dāng)中的方法就必須把 walk使用public修飾符(那是因?yàn)榻涌谑且粋€(gè)抽象的父類 這個(gè)父類所有定義的方法都是默認(rèn)public的 所以子類實(shí)現(xiàn)的時(shí)候 也需要添加public修飾符)
interface IWalkable{
void walk();
// interface ABC();
// IWalkable(); 不能顯示構(gòu)造器
}
interface ISwimable {
}
//貓
class Cat implements IWalkable{
public void walk(){
System.out.println("貓");
}
}
class dog implements IWalkable{
public void walk(){
System.out.println("狗");
}
}
//魚(yú) 一個(gè)接口對(duì)多個(gè)類
class Fish extends Animal implements ISwimable,IWalkable{
public void walk(){
}
public void swim(){
System.out.println("魚(yú)");
}
}
class Animal{
}
interface Amph extends IWalkable,ISwimable{
}
public class Main {
public static void main(String[] args){
System.out.println("aa");
// new IWalkable(); 不能new 接口
// Cat c = new Cat();/*唾棄 這種寫(xiě)法沒(méi)意義 要實(shí)現(xiàn)面向接口的編程 請(qǐng)看下面的代碼*/
// c.walk();
IWalkable w = new Cat();/*實(shí)現(xiàn)面向接口的編程 實(shí)現(xiàn)子類的方法 所以需要父類的指針指向子類的對(duì)象 從而實(shí)現(xiàn)子類的方法 進(jìn)行輸出*/
IWalkable i = new dog();
ISwimable s = new Fish();
Fish fish = new Fish();
fish.swim();
w.walk();
i.walk();
}
}
最后編輯于 :2017.12.08 17:33:33
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者 平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。