1 接口
1.1 概念:
- Java裏面由於不允許多重繼承,所以如果要實現多個類的功能,則可以通過實現多個接口來實現。
- Java接口和Java抽象類代表的就是抽象類型, 就是我們需要提出的抽象層的具體表現。
- OOP面向對象的編程,如果要提高程序的複用率,增加程序的可維護性,可擴展性,就必須是面向接口的編程,面向抽象的編程。
- 正確地使用接口、抽象類這些太有用的抽象類型做爲java結構層次上的頂層。
- interface 接口名{ 代碼… }
1.2 特點:
- 接口中都是抽象方法
- 通過interface關鍵字創建接口
- 通過implements讓子類來實現
- 可以理解成,接口是一個特殊的抽象類
- 接口突破了java的單繼承的侷限性
- 接口和類之間可以多實現,接口和接口之間可以多繼承
- 接口是對外暴露的規則,是一套開發規範
- 接口提高了程序的功能擴展,降低了耦合性!! 繼承的耦合性很強!!
public class Test1_Interface {
public static void main(String[] args) {
//TODO 創建多態對象測試
}
}
//接口可以看做是程序的一套規範規則
//通過interface關鍵字定義接口
interface Inter{
//接口裏可以有普通方法嗎??--- 不可以,都是抽象方法
abstract public void save() ;
abstract public void delete() ;
}
//接口的實現類 和 接口之間是 implements實現的關係
//實現類實現了接口後,有兩條路可以選:是一個抽象的實現類 + 重寫接口中的所有抽象方法
//abstract class InterImpl implements Inter {
class InterImpl implements Inter {
@Override
public void save() {
System.out.println("正在保存您的數據...");
}
@Override
public void delete() {
System.out.println("正在刪除您的數據...");
}
}
2 接口的用法
2.1 構造方法:
- 接口裏是沒有構造方法的。
- 在創建實現類的對象時默認的super(),是調用的默認Object的無參構造。
//創建接口 interface Inter2{ //1、接口裏可以有構造方法嗎? --- 不能!! // public Inter2() {} }
2.2 成員變量:
- 接口裏沒有成員變量,都是常量。所以,你定義一個變量沒有寫修飾符時,默認會加上:public static final
2.3 成員方法:
- 接口裏的方法,默認就都是抽象的,如果你不寫明是abstract的,那會自動補齊。
2.4 複雜用法:
- Java中單繼承的侷限性通過接口可以解決。
- 接口可以多繼承也可以多實現,甚至可以繼承的同時多實現。
public class Test4_ComInter {
public static void main(String[] args) {
Interface1 in = new Interface1Impl();
in.save();
in.update();
}
}
//創建接口1
interface Interface1{
void save();
void update();
}
//創建接口2
interface Interface2{
void get();
void delete();
}
//打破了java單繼承的侷限性,因爲接口之間可以多繼承,多個接口之間逗號隔開
interface Interface3 extends Interface1,Interface2{
void add();
}
//接口還可以多實現嗎??---可以多實現,只不過接口之間逗號隔開
class ManyImpl implements Interface1,Interface2{
public void save() {}
public void update() {}
public void get() {}
public void delete() {}
}
//接口可以繼承的同時,多實現?? --
class MoreImple extends ManyImpl implements Interface1,Interface2 {
}
//創建實現類,使用3號接口的功能,需要重寫幾個方法呢??---同時重寫1號和2號和3號接口裏的所有功能
class Interface3Impl implements Interface3{
@Override
public void save() { }
@Override
public void update() { }
@Override
public void get() { }
@Override
public void delete() { }
@Override
public void add() { }
}
//創建實現類
class Interface1Impl implements Interface1{
@Override
public void save() {
System.out.println("save()...");
}
@Override
public void update() {
System.out.println("update()...");
}
}