消防做設(shè)計有什么網(wǎng)站無錫網(wǎng)站建設(shè)優(yōu)化公司
前言
本篇會講到Java中接口內(nèi)容,概念和注意點可能比較多,需要耐心多看幾遍,我盡可能的使用經(jīng)典的例子幫助大家理解~
歡迎關(guān)注個人主頁:逸狼
創(chuàng)造不易,可以點點贊嗎~
如有錯誤,歡迎指出~
目錄
前言
接口
語法
注意
?代碼理解
接口運用舉例
IUSB接口
KeyBoard類
Mouse類
Computer類
多個接口
代碼理解(語法層面)
接口解決多繼承問題 代碼示例
Animal類
IFly、IRunning、ISwimming接口
Fish類
Duck類
再加上一個測試
接口間的繼承
代碼理解
接口
接口是公共的行為規(guī)范標準,在Java中,接口是多個類的公共規(guī)范,是一種引用數(shù)據(jù)類型。
語法
- 定義格式與類基本相同,將class關(guān)鍵字換成interface關(guān)鍵字
- 接口中的成員變量(習慣上是大寫)默認為public static final 修飾的(寫的時候可省略public static final),必須被初始化
- 接口中的方法默認只能是public abstract 修飾的(也可省略不寫,不寫默認也是抽象方法(不能有具體的實現(xiàn),否則會報錯),用其他修飾符會報錯)
- 接口中使用default修飾的方法和static修飾的方法是可以有具體的實現(xiàn)的
- 接口中不能有靜態(tài)代碼塊、示例代碼塊和構(gòu)造方法。
- 接口雖然不是類,但編譯完成后也是字節(jié)碼文件(后綴名是.class)。
注意
- 創(chuàng)建接口時, 接口的命名一般以大寫字母 I 開頭
- 接口的命名一般使用 "形容詞" 詞性的單詞.
- 阿里編碼規(guī)范中約定, 接口中的方法和屬性不要加任何修飾符號, 保持代碼的簡潔性.
?代碼理解
package demo2inter;public interface ITestInterFace {public static final int a=100;int AGE=10;abstract public void fun1();void fun2();default void func(){System.out.println("default!");}public static void staticFunc(){System.out.println("staticFunc!");}
}
接口的簡單使用
- 接口不能被實例化
- 接口需要被類實現(xiàn),需要使用關(guān)鍵字implements來實現(xiàn)
- 當一個類實現(xiàn)類這個接口,那么這個類要重寫這個方法
- 接口也可以發(fā)生向上轉(zhuǎn)型、動態(tài)綁定和多態(tài)。
public interface ITestInterFace {void draw();}
class Rect implements ITestInterFace{@Overridepublic void draw() {System.out.println("畫一個矩形!");}
}
class Triangle implements ITestInterFace{@Overridepublic void draw() {System.out.println("畫一個三角形!");}
}
class Test{public static void drawMap(ITestInterFace iTestInterFace){iTestInterFace.draw();}public static void main(String[] args) {drawMap(new Rect());//發(fā)生了向上轉(zhuǎn)型和動態(tài)綁定drawMap(new Triangle());}
}
接口運用舉例
請實現(xiàn)筆記本電腦使用USB鼠標、USB鍵盤的例子
- USB接口:包含打開設(shè)備、關(guān)閉設(shè)備功能
- 筆記本類:包含開機功能、關(guān)機功能、使用USB設(shè)備功能
- 鼠標類:實現(xiàn)USB接口,并具備點擊功能
- 鍵盤類:實現(xiàn)USB接口,并具備輸入功能
在包demo3中,創(chuàng)建3個類,一個接口
IUSB接口
package demo3;public interface IUSB {// USB接口void openDevice();//打開服務void closeDevice();//關(guān)閉服務}
KeyBoard類
package demo3;public class KeyBoard implements IUSB {@Overridepublic void openDevice() {System.out.println("打開鍵盤!");}@Overridepublic void closeDevice() {System.out.println("關(guān)閉鍵盤!");}public void input(){System.out.println("鍵盤輸入!");}
}
Mouse類
package demo3;public class Mouse implements IUSB{@Overridepublic void openDevice() {System.out.println("打開鼠標!");}@Overridepublic void closeDevice() {System.out.println("關(guān)閉鼠標!");}public void click(){System.out.println("點擊鼠標!");}
}
Computer類
package demo3;import demo2inter.ITestInterFace;public class Computer {public void powerOff (){System.out.println("關(guān)閉電腦!");}public void powerOn(){System.out.println("打開電腦!");}public void useDevice(IUSB usb){usb.openDevice();//這里要區(qū)分 USB引用了哪個對象if(usb instanceof Mouse){Mouse mouse =(Mouse) usb;//向下轉(zhuǎn)型mouse.click();}//調(diào)用鍵盤if(usb instanceof KeyBoard){KeyBoard keyBoard=(KeyBoard) usb;keyBoard.input();}usb.closeDevice();}public static void main(String[] args) {Computer computer=new Computer();computer.powerOn();computer.useDevice(new KeyBoard());//向上轉(zhuǎn)型computer.useDevice(new Mouse());computer.powerOff();}
}
多個接口
Java中不支持多繼承,但是一個類可以實現(xiàn)多個接 口。接口表達含義是 具有**特性,可以幫助程序員忘掉類型,只關(guān)注特性。
代碼理解(語法層面)
類TestDemo4實現(xiàn)了IA和IB接口
package demo4;//多個接口
interface IA{void testA();
}
interface IB{void testB();
}
class TestDemo4 implements IA,IB{@Overridepublic void testA() {System.out.println("testA()");}@Overridepublic void testB() {System.out.println("testB()");}
}
public class Test4 {public static void main(String[] args) {TestDemo4 testDemo4=new TestDemo4();testDemo4.testA();testDemo4.testB();}}
接口解決多繼承問題 代碼示例
在demomoreinher包中有Animal抽象類,Duck,Fish類 以及IFly、IRunning、ISwimming接口
Animal類
IFly、IRunning、ISwimming等動物特性應該采用接口方式
package demomoreinher;public abstract class Animal {protected String name;protected int age;public Animal(String name, int age) {this.name = name;this.age = age;}public abstract void eat();//像跑 游泳 飛等動作不能寫在這里,因為不是所有動物都會這些技能 應該寫在接口中
}
IFly、IRunning、ISwimming接口
//注意:這里的代碼是在不同IFly、IRunning、ISwimming接口文件中的
public interface IFly {void fly();
}public interface IRunning {void run();
}public interface ISwimming {void swim();
}
Fish類
魚只會游泳這項特性,所以接口ISwimming
package demomoreinher;public class Fish extends Animal implements ISwimming{//如果這里游泳寫出類,java是不支持多繼承的,所有說接口解決了多繼承問題public Fish(String name, int age) {super(name, age);}@Overridepublic void eat() {System.out.println(this.name+"吃魚糧!");}@Overridepublic void swim() {System.out.println(this.name+"游泳~");}
}
Duck類
而鴨子游泳,跑,飛這3個技能都會,所以三個特性都接上
package demomoreinher;public class Duck extends Animal implements ISwimming,IFly,IRunning{public Duck(String name, int age) {super(name, age);}@Overridepublic void eat() {System.out.println(this.name+"吃鴨糧!");}@Overridepublic void fly() {System.out.println(this.name+"飛~~~");}@Overridepublic void run() {System.out.println(this.name+"跑~~~");}@Overridepublic void swim() {System.out.println(this.name+"游泳~~~");}
}
再加上一個測試
package demomoreinher;public class TestAnimal {public static void eatFunc(Animal animal){animal.eat();//實現(xiàn)eat的動態(tài)綁定}public static void walk(IRunning running){running.run();//實現(xiàn)跑的動態(tài)綁定}public static void main(String[] args) {walk(new Duck("唐老鴨",3));eatFunc(new Fish("靈兒",2));}
}
測試結(jié)果
接口間的繼承
相當于將接口合并在一起了
代碼理解
IC繼承了IA和IB,使IC接口的功能包含了IA和IB的功能,當然類TestDeme在實現(xiàn)接口IC時,要將IA,IB和IC的方法一起都要重寫
package demo5;//接口繼承問題
interface IA{void testA();
}
interface IB{void testB();
}
//IC接口不僅具備了自己的testC這個功能,還 擴展 了IA和IB的功能
interface IC extends IA,IB{void testC();}
class TestDemo implements IC{@Overridepublic void testA() {System.out.println("testA()");}@Overridepublic void testB() {System.out.println("testB()");}@Overridepublic void testC() {System.out.println("testC()");}
}