interface:接口
1.使用說明:
1.接口使用interface來定義
- 2.Java中,接口和類是并列的兩個結構
- 3.如何定義接口:定義接口中的成員
-
3.1 JDK7及以前:只能定義全局常量和抽象方法
-
>全局常量:public static final的.但是書寫時,可以省略不寫
-
>抽象方法:public abstract的
-
3.2 JDK8:除了定義全局常量和抽象方法之外,還可以定義靜態方法、默認方法(略
-
- 接口中不能定義構造器的!意味著接口不可以實例化
-
- Java開發中,接口通過讓類去實現(implements)的方式來使用.
- 如果實現類覆蓋了接口中的所抽象方法,則此實現類就可以實例化
- 如果實現類沒覆蓋接口中所的抽象方法,則此實現類仍為一個抽象類
-
- Java類可以實現多個接口 —>彌補了Java單繼承性的局限性
- 格式:class AA extends BB implements CC,DD,EE
-
- 接口與接口之間可以繼承,而且可以多繼承
-
- 接口的具體使用,體現多態性
-
- 接口,實際上可以看做是一種規范
2.舉例:
class Computer{
public void transferData(USB usb){//USB usb = new Flash();usb.start();System.out.println("具體傳輸數據的細節");usb.stop();
}
}
interface USB{
//常量:定義了長、寬、最大最小的傳輸速度等
void start();void stop();
}
class Flash implements USB{
@Override
public void start() {System.out.println("U盤開啟工作");
}@Override
public void stop() {System.out.println("U盤結束工作");
}
}
class Printer implements USB{
@Override
public void start() {
System.out.println(“打印機開啟工作”);
}
@Override
public void stop() {System.out.println("打印機結束工作");
}
}
體會:
- 1.接口使用上也滿足多態性
- 2.接口,實際上就是定義了一種規范
- 3.開發中,體會面向接口編程!
3.體會面向接口編程的思想
面向接口編程:我們在應用程序中,調用的結構都是JDBC中定義的接口,不會出現具體某一個
數據庫廠商的API。
4.Java8中關于接口的新規范
//知識點1:接口中定義的靜態方法,只能通過接口來調用。
//知識點2:通過實現類的對象,可以調用接口中的默認方法。
//如果實現類重寫了接口中的默認方法,調用時,仍然調用的是重寫以后的方法
//知識點3:如果子類(或實現類)繼承的父類和實現的接口中聲明了同名同參數的默認方法,那么子類在沒重寫此方法的情況下,默認調用的是父類中的同名同參數的方法。–>類優先原則
//知識點4:如果實現類實現了多個接口,而這多個接口中定義了同名同參數的默認方法,
//那么在實現類沒重寫此方法的情況下,報錯。–>接口沖突。
//這就需要我們必須在實現類中重寫此方法
//知識點5:如何在子類(或實現類)的方法中調用父類、接口中被重寫的方法
public void myMethod(){
method3();//調用自己定義的重寫的方法
super.method3();//調用的是父類中聲明的
//調用接口中的默認方法
CompareA.super.method3();
CompareB.super.method3();
}
5.面試題:
抽象類和接口的異同?
相同點:不能實例化;都可以包含抽象方法的。
不同點:
1)把抽象類和接口(java7,java8,java9)的定義、內部結構解釋說明
2)類:單繼承性 接口:多繼承
類與接口:多實現
代理模式
- 解決的問題
代理模式是Java開發中使用較多的一種設計模式。代理設計就是為其他對象提供一種代理以控制對這個對象的訪問。
-
舉例
interface NetWork{public void browse();
}
//被代理類
class Server implements NetWork{
@Override
public void browse() {System.out.println("真實的服務器訪問網絡");
}
}
//代理類
class ProxyServer implements NetWork{
private NetWork work;public ProxyServer(NetWork work){this.work = work;
}public void check(){System.out.println("聯網之前的檢查工作");
}@Override
public void browse() {check();work.browse();}
}
- 應用場景
1. 解決的問題
實現了創建者與調用者的分離,即將創建對象的具體過程屏蔽隔離起來,達到提高靈活性的目的。
2. 具體模式
簡單工廠模式:用來生產同一等級結構中的任意產品。(對于增加新的產品,需要修改已有代碼)
工廠方法模式:用來生產同一等級結構中的固定產品。(支持增加任意產品)
抽象工廠模式:用來生產不同產品族的全部產品。(對于增加新的產品,無能為力;支持增加產品族)