做智能家居網(wǎng)站需要的參考文獻(xiàn)關(guān)鍵詞優(yōu)化公司推薦
目錄
接口
接口的概念
語法?
接口使用?
接口實(shí)現(xiàn)用例?
接口特性 ?
實(shí)現(xiàn)多個接口和實(shí)現(xiàn)用例
接口間的繼承?
接口
接口的概念
在現(xiàn)實(shí)生活中,接口的例子比比皆是,比如:筆記本上的 USB 口,電源插座等。
電腦的 USB 口上,可以插: U 盤、鼠標(biāo)、鍵盤 ... 所有符合 USB 協(xié)議的設(shè)備
電源插座插孔上,可以插:電腦、電視機(jī)、電飯煲 ... 所有符合規(guī)范的設(shè)備
通過上述例子可以看出: 接口就是公共的行為規(guī)范標(biāo)準(zhǔn),大家在實(shí)現(xiàn)時,只要符合規(guī)范標(biāo)準(zhǔn),就可以通用 。
在 Java 中,接口可以看成是:多個類的公共規(guī)范,是一種引用數(shù)據(jù)類型。?
語法?
接口在語法上和類相似?
public interface 接口名稱 {
......
}
提示:?? 創(chuàng)建接口時, 接口的命名一般以大寫字母 I 開頭?
接口使用?
接口不能直接使用,必須要有一個"實(shí)現(xiàn)類"來"實(shí)現(xiàn)"該接口,并實(shí)現(xiàn)接口中的所有抽象方法。
public class 類名稱 implements 接口名稱 {
...
}
注意:子類和父類之間是extends 繼承關(guān)系,類與接口之間是 implements 實(shí)現(xiàn)關(guān)系。 ?
接口實(shí)現(xiàn)用例?
以筆記本電腦使用 USB 鼠標(biāo)、 USB 鍵盤為例
USB接口????????筆記本類????????鼠標(biāo)類????????鍵盤類
//USB接口
public interface USB {//方法,打開設(shè)備,關(guān)閉設(shè)備void openEquipment();void stopEquipment();
}//定義鼠標(biāo)類,使用接口
class Mouse implements USB {//使用接口,就要重寫USB接口的抽象方法@Overridepublic void openEquipment() {System.out.println("使用鼠標(biāo)");}//自定義一個鼠標(biāo)點(diǎn)擊的功能public void click(){System.out.println("鼠標(biāo)點(diǎn)擊");}@Overridepublic void stopEquipment() {System.out.println("關(guān)閉鼠標(biāo)");}
}//定義鍵盤類,使用接口
class Keyboard implements USB{@Overridepublic void openEquipment() {System.out.println("使用鍵盤");}//自定義一個鍵盤輸入的方法public void inPut() {System.out.println("鍵盤輸入");}@Overridepublic void stopEquipment() {System.out.println("關(guān)閉鍵盤");}
}
//定義電腦類,使用設(shè)備
class Computer{public void powerOn(){System.out.println("打開電源");}public void useEquipment(USB usb){//這里使用USB usb的原因是:為了傳參并發(fā)生向上轉(zhuǎn)型usb.openEquipment();//這里會發(fā)生動態(tài)綁定//這里,我們調(diào)用了使用設(shè)備的方法,但我們有鼠標(biāo)和鍵盤,他們都要各自特有的方法click和inPut//但usb是接口類型,直接用usb去調(diào)用他們的特有方法,不可行//區(qū)分 引用的是誰的對象if(usb instanceof Mouse){Mouse mouse = (Mouse) usb;mouse.click();}else if(usb instanceof Keyboard){Keyboard keyboard = (Keyboard) usb;keyboard.inPut();}usb.stopEquipment();}public void powerOff(){System.out.println("關(guān)閉電源");}}
class Test{public static void main(String[] args) {Computer computer = new Computer();computer.powerOn();System.out.println();computer.useEquipment(new Keyboard());System.out.println();computer.useEquipment(new Mouse());System.out.println();computer.powerOff();}
}
接口特性 ?
- 接口類型是一種引用類型,不能直接 new 接口的對象
- 接口中的每一個方法都是默認(rèn)被 public?abstract 修飾
- 接口中的方法不能在接口中實(shí)現(xiàn)(因?yàn)槌橄蠓椒ú荒苡芯唧w的實(shí)現(xiàn)),只能由實(shí)現(xiàn)接口的類來實(shí)現(xiàn)
- 重寫接口中的方法時,不能使用默認(rèn)的訪問權(quán)限(因?yàn)榻涌诘姆椒J(rèn)是public)
- 接口中可以擁有變量,但接口中的變量會默認(rèn)被public static final 修飾
- 接口中不能有靜態(tài)代碼塊和構(gòu)造方法
- 接口雖然不是類,但是接口編譯完成后字節(jié)碼文件的后綴格式也是.class
- 如果類沒有實(shí)現(xiàn)接口中的所有的抽象方法,則類必須設(shè)置為抽象類
實(shí)現(xiàn)多個接口和實(shí)現(xiàn)用例
在 Java 中,類和類之間是單繼承的,一個類只能有一個父類,即 Java 中不支持多繼承 ,但是 一個類可以實(shí)現(xiàn)多個接 口 。
下面通過類來表示一組動物
創(chuàng)一個動物類
//動物類
class Animals{private String name;public Animals(String name) {this.name = name;}
}
創(chuàng)幾個接口?
//吃 接口
interface EAT{void eat();
}//跑 接口
interface RUN{void run();
}//飛 接口
interface FLY{void fly();
}//游泳 接口
interface SWIM{void swim();
}
創(chuàng)幾個具體的動物類?
小狗,可以吃和跑?
class Dog extends Animals implements EAT,RUN{public Dog(String name) {super(name);}@Overridepublic void eat() {System.out.println(this.name + "在吃");}@Overridepublic void run() {System.out.println(this.name + "在跑");}
}
小魚,可以吃和游?
class Fish extends Animals implements EAT,SWIM{public Fish(String name){super(name);}@Overridepublic void eat() {System.out.println(this.name + "在吃");}@Overridepublic void swim() {System.out.println(this.name + "在游");}
}
小鴨子,可以吃,飛,跑和游
class Duck extends Animals implements EAT,RUN,FLY,SWIM{public Duck(String name){super(name);}@Overridepublic void eat() {System.out.println(this.name + "在吃");}@Overridepublic void run() {System.out.println(this.name + "在跑");}@Overridepublic void fly() {System.out.println(this.name + "在飛");}@Overridepublic void swim() {}
}
上面的代碼展示了 Java 面向?qū)ο缶幊讨凶畛R姷挠梅?/span>: 一個類繼承一個父類, 同時實(shí)現(xiàn)多種接口?
繼承表達(dá)的含義是 is - a 語義, 而接口表達(dá)的含義是 具有 xxx 特性?
以下是完整代碼和執(zhí)行結(jié)果?
class Animals{public String name;public Animals(String name) {this.name = name;}
}//吃 接口
interface EAT{void eat();
}//跑 接口
interface RUN{void run();
}//飛 接口
interface FLY{void fly();
}//游泳 接口
interface SWIM{void swim();
}class Dog extends Animals implements EAT,RUN{public Dog(String name) {super(name);}@Overridepublic void eat() {System.out.println(this.name + "在吃");}@Overridepublic void run() {System.out.println(this.name + "在跑");}
}class Fish extends Animals implements EAT,SWIM{public Fish(String name){super(name);}@Overridepublic void eat() {System.out.println(this.name + "在吃");}@Overridepublic void swim() {System.out.println(this.name + "在游");}
}class Duck extends Animals implements EAT,RUN,FLY,SWIM{public Duck(String name){super(name);}@Overridepublic void eat() {System.out.println(this.name + "在吃");}@Overridepublic void run() {System.out.println(this.name + "在跑");}@Overridepublic void fly() {System.out.println(this.name + "在飛");}@Overridepublic void swim() {}
}public class Blog {public static void main(String[] args) {Dog dog = new Dog("小狗");dog.eat();dog.run();Fish fish = new Fish("小魚");fish.eat();fish.swim();Duck duck = new Duck("小鴨子");duck.eat();duck.fly();duck.run();duck.swim();}}
接口間的繼承?
在Java中,類和類之間是單繼承的,一個類可以實(shí)現(xiàn)多個接口,接口與接口之間可以多繼承。即:用接口可以達(dá)到多繼承的目的。
接口可以繼承一個接口, 達(dá)到復(fù)用的效果. 使用 extends 關(guān)鍵字
interface RUN{void run();
}//游泳 接口
interface SWIM{void swim();
}interface ICanDo extends RUN, SWIM {
}class Frog implements ICanDo {...
}
?通過接口繼承創(chuàng)建一個新的接口 ICanDo?表示 "兩棲的". 此時實(shí)現(xiàn)接口創(chuàng)建的 Frog 類, 就繼續(xù)要實(shí)現(xiàn) run 方法, 也需要實(shí)現(xiàn) swim 方法.
接口間的繼承相當(dāng)于把多個接口合并在一起