java接口示例_【基础篇】java-接口及其示例
接口
接口是對(duì)方法的封裝,它不是類(lèi),但也會(huì)編譯為.class文件。接口的關(guān)鍵字是interface,定義方式與類(lèi)相似,是一種引用數(shù)據(jù)類(lèi)型。接口不能創(chuàng)建對(duì)象,但可以被類(lèi)使用(implements,類(lèi)似于繼承),一個(gè)實(shí)現(xiàn)接口的類(lèi)中,要實(shí)現(xiàn)接口所有的抽象方法,否則就是一個(gè)抽象類(lèi)了。
public interface 接口名稱(chēng) {
// 抽象方法
// 默認(rèn)方法
// 靜態(tài)方法
// 私有方法
}抽象方法
public interface InterFaceName {
public abstract void method();
}
使用abstract修飾的抽象方法,供子類(lèi)實(shí)現(xiàn)使用。默認(rèn)方法
使用 default 修飾,不可省略,供子類(lèi)調(diào)用或者子類(lèi)重寫(xiě)。
public interface InterFaceName {
public default void method() {
// 執(zhí)行語(yǔ)句
}
}靜態(tài)方法
使用 static 修飾,供接口直接調(diào)用,接口名.方法名()的方式直接調(diào)用,不能被子類(lèi)實(shí)現(xiàn)。
public interface InterFaceName {
public static void method2() {
// 執(zhí)行語(yǔ)句
}
}私有方法
使用 private 修飾,供接口中的默認(rèn)方法或者靜態(tài)方法調(diào)用。
public interface InterFaceName {
private void method() {
// 執(zhí)行語(yǔ)句
}
}類(lèi)與接口的關(guān)系
類(lèi)與接口的關(guān)系為實(shí)現(xiàn)關(guān)系,即類(lèi)實(shí)現(xiàn)接口,用implements關(guān)鍵字。非抽象子類(lèi)實(shí)現(xiàn)接口,必須重寫(xiě)接口的所有抽象方法,而默認(rèn)方法可以直接調(diào)用,也可以重寫(xiě)。
class 類(lèi)名 implements 接口名 {
// 重寫(xiě)接口中抽象方法【必須】
// 重寫(xiě)接口中默認(rèn)方法【可選】
}私有方法的使用
私有方法:只有默認(rèn)方法可以調(diào)用。
私有靜態(tài)方法:默認(rèn)方法和靜態(tài)方法可以調(diào)用。接口的多實(shí)現(xiàn)
接口與繼承不同,是可以多實(shí)現(xiàn)的。就是一個(gè)類(lèi)可以實(shí)現(xiàn)多個(gè)接口。
class 類(lèi)名 [extends 父類(lèi)名] implements 接口名1,接口名2,接口名3... {
// 重寫(xiě)接口中抽象方法【必須】 // 重寫(xiě)接口中默認(rèn)方法【不重名時(shí)可選】}
當(dāng)實(shí)現(xiàn)多個(gè)接口時(shí),對(duì)于抽象方法,必須全部重寫(xiě),如果抽象方法重名,只需重寫(xiě)一次即可。這是因?yàn)橹貙?xiě)是對(duì)方法的覆蓋,以最新的為準(zhǔn)。
對(duì)于默認(rèn)方法,實(shí)現(xiàn)類(lèi)都可以使用,如果有重名,必須重寫(xiě)一次,因?yàn)椴恢貙?xiě)會(huì)混亂。
注意,默認(rèn)方法有個(gè)優(yōu)先級(jí)問(wèn)題,如果默認(rèn)方法與實(shí)現(xiàn)類(lèi)的父類(lèi)成員方法重名,會(huì)以父類(lèi)的成員方法為較高優(yōu)先級(jí)。
對(duì)于靜態(tài)方法,類(lèi)不能實(shí)現(xiàn)靜態(tài)方法,所以即使重名也不受影響。接口也可以繼承
接口是可以實(shí)現(xiàn)繼承的,也是用extends關(guān)鍵字,不過(guò)接口可以實(shí)現(xiàn)多繼承,當(dāng)然,接口只能繼承接口,類(lèi)型要保持一致。接口注意事項(xiàng)
-接口中,無(wú)法定義成員變量,但是可以定義常量,其值不可以改變,默認(rèn)使用 public static final修飾。
-接口中,沒(méi)有構(gòu)造方法,不能創(chuàng)建對(duì)象。
-接口中,沒(méi)有靜態(tài)代碼塊。
接口實(shí)現(xiàn)案例案例需求
筆記本電腦( laptop)通常具備使用USB設(shè)備的功能。在生產(chǎn)時(shí),筆記本都預(yù)留了可以插入U(xiǎn)SB設(shè)備的USB接口,
但具體是什么USB設(shè)備,筆記本廠商并不關(guān)心,只要符合USB規(guī)格的設(shè)備都可以。
定義USB接口,具備最基本的開(kāi)啟功能和關(guān)閉功能。鼠標(biāo)和鍵盤(pán)要想能在電腦上使用,那么鼠標(biāo)和鍵盤(pán)也必須遵守
USB規(guī)范,實(shí)現(xiàn)USB接口,否則鼠標(biāo)和鍵盤(pán)的生產(chǎn)出來(lái)也無(wú)法使用。案例分析
-USB接口,包含開(kāi)啟和關(guān)閉功能;
-筆記本類(lèi),包含運(yùn)行、關(guān)機(jī)功能,使用usb設(shè)備功能;
-鼠標(biāo)類(lèi),實(shí)現(xiàn)usb接口,具備點(diǎn)擊方法
-鍵盤(pán)類(lèi),實(shí)現(xiàn)USB接口,具備敲擊方法案例實(shí)現(xiàn)
-定義USB接口
interface USB{
void open();
void close();
}
-定義鼠標(biāo)類(lèi)
class Mouse implements USB{
public void open(){
System.out.println("鼠標(biāo)開(kāi)啟");
}
public void close(){
System.out.println("鼠標(biāo)關(guān)閉");
}
public void click(){
System.out.println("鼠標(biāo)單機(jī)");
}
}
-定義鍵盤(pán)類(lèi)
class KeyBoard implements USB{
public void open(){
System.out.println("鍵盤(pán)開(kāi)啟");
}
public void close(){
System.out.println("鍵盤(pán)關(guān)閉");
}
public void type(){
System.out.println("鍵盤(pán)敲擊");
}
}
-定義筆記本類(lèi)
class Laptop{
public void run(){
System.out.println("筆記本運(yùn)行");
}
public void useUSB(USB usb){
if(usb != null){
usb.open();
if(usb instanceof Mouse){
Mouse m = (Mouse) usb;
m.click();
}else if (usb instanceof KeyBoard){
KeyBoard kb = (KeyBoard)usb;
kb.type();
}
usb.close();
}
}
public void shutDown(){
System.out.println("筆記本關(guān)閉");
}
}
-編寫(xiě)測(cè)試類(lèi)
public class Test{
public static void main(String[] args){
Labtop lt = new Laptop();
lt.run();
USB u1 = new Mouse();
lt.useUSB(u1);
USB u2 = new KeyBoard();
lt.useUSB(u2);
lt.shutDown();
}
}
這里以多態(tài)的方式實(shí)現(xiàn)對(duì)usb設(shè)備的創(chuàng)建,類(lèi)型都是接口類(lèi)型的usb,因?yàn)榻涌谝彩且环N引用類(lèi)型,這是符合規(guī)定的,并不是接口生成了對(duì)象,而是接口類(lèi)型變量,指向了Mouse和KeyBoard對(duì)象,在調(diào)用筆記本對(duì)象的方法,判斷二者對(duì)應(yīng)設(shè)備類(lèi)型,并做對(duì)應(yīng)操作。
這個(gè)示例是接口與多態(tài)的實(shí)操案例。
總結(jié)
以上是生活随笔為你收集整理的java接口示例_【基础篇】java-接口及其示例的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: gitlab mysql 表_gitla
- 下一篇: extends thread java_