java 介面(interface)的應用詳解
阿新 • • 發佈:2018-11-05
java 介面(interface)的應用詳解
1.java 介面(interface)
- 介面(interface)是與類並行的一個概念
- 介面的主要用途就是被實現類實現。(面向介面程式設計)
2.java 介面(interface)使用的知識點
- 介面可以看做是一個特殊的抽象類。是常量與抽象方法的一個集合,不能包含變數、一般的方法;
- 介面是沒有構造器的。
- 介面定義的就是一種功能,這個功能可以是被類所實現(implements)
如:class CC extends DD implements A - 實現介面的類,必須重寫其中的所有的抽象方法,方可例項化,若沒有重寫所有的抽象方法,則此類仍為抽象類
- 類可以實現多個介面。 -----java 中類的繼承是單繼承的
- 介面與介面之間也是繼承關係,而且可以實現多繼承性
注:5,6描述的是java中的繼承的特點 - api中的Collection、Comparable就是一個介面
- 介面中的所有成員變數都預設是由public static final修飾的。
- 介面中的所有方法都預設是由public abstract修飾的
public class TestInterface { public static void main(String[] args) { System.out.println(A.I);//可以直接輸出 } } interface A{ //常量:所有的都是用public static final // 可以省略前面的宣告 public static final int I = 1; public static final boolean FLAG = false; //抽象方法:所有的抽象方法都用public abastract修飾,可以省略 public abstract void method1(); void method2(); } abstract class BB implements A{ } class DD{ } interface MM{ } class CC extends DD implements A,MM{ public void method1() { } // void method2() { // 許可權不能小於介面定義的,所以只能定義為public // } public void method2() { } } //介面之間仍為繼承關係!(而且可以多繼承) interface JJ extends MM,A{ void method4(); }
8.介面與具體的實現類之間也存在多型性
//介面與具體的實現類直接也存在多型性
public class TestInterface1 {
public static void main(String[] args) {
Duck d = new Duck();
TestInterface1.test1(d);
TestInterface1.test2(d);
TestInterface1.test3(d);
}
public static void test1(Runner r) {//Runner r = new Duck();
r.run();//虛擬方法呼叫
}
public static void test2(Swimmer s) {//Swimmer s = new Duck();
s.swim();;
}
public static void test3(Flier f) {//Flier f = new Duck();
f.fly();
}
}
interface Runner{
public abstract void run();
}
interface Swimmer{
void swim();
}
interface Flier{
void fly();
}
class Duck implements Runner,Swimmer,Flier{
@Override
public void fly() {
System.out.println("醜小鴨也可以會變成白天鵝!");
}
@Override
public void swim() {
System.out.println("紅掌撥清波");
}
@Override
public void run() {
System.out.println("鴨子屁股扭扭的走路");
}
}
3.介面使用總結
- 通過介面可以實現不相關的類的相同行為,而不需要考慮這些類之間的層次關係
- 通過介面可以指明多個類需要實現的方法,一般用於定義物件的擴張功能。
- 介面主要用來定義規範,接觸耦合關係。如:高通。
4.結果的應用和 實現介面的匿名類物件
//介面應用
public class TestUSB {
/*輸出結果:
* U盤開始工作
此裝置開始工作....
U盤結束工作
U盤開始工作
此裝置開始工作....
U盤結束工作
手機開始工作
此裝置開始工作....
開機結束工作
*/
public static void main(String[] args) {
Computer c = new Computer();
c.doWork(new Flash());
Flash f = new Flash();
c.doWork(f);
//實現介面的匿名類物件
USB phone = new USB(){
@Override
public void start() {
System.out.println("手機開始工作");
}
@Override
public void stop() {
System.out.println("開機結束工作");
}
};
c.doWork(phone);
}
}
//這裡為標準
interface USB{
//USB尺寸的大小,可以設定為常量
//功能設定為抽象
void start();
void stop();
}
class Computer{
public void doWork(USB usb) {
usb.start();
System.out.println("此裝置開始工作....");
usb.stop();
}
}
class Printer implements USB{
public void start() {
System.out.println("印表機開始工作");
}
public void stop() {
System.out.println("印表機結束工作");
}
}
class Flash implements USB{
public void start() {
System.out.println("U盤開始工作");
}
public void stop() {
System.out.println("U盤結束工作");
}
}