介面 (1)當抽象類中的方法都是抽象的時候,java就提供了一種新的表現形式:介面 ,介面是功能的集合 介面不能創建對象 (2)格式 父介面:public interface Tnter{ } 子類:public class interImp implements Itner{ } 介面的使用 1. ...
介面
(1)當抽象類中的方法都是抽象的時候,java就提供了一種新的表現形式:介面 ,介面是功能的集合 介面不能創建對象
(2)格式
父介面:public interface Tnter{
}
子類:public class interImp implements Itner{
}
介面的使用
1.介面不能創建對象
2.定義實現類來實現介面
實現的關鍵字 implements
3.重寫抽象方法
4.創建實現類對象 調用方法
介面的特點
1.不需要被abstract 修飾
2.類實現介面,可以單實現 還可以多實現
3.介面可以繼承介面,可以單繼承也可以多繼承
4.介面與父類的功能可以重覆,均代表要具備某種功能
介面的成員特點
成員變數 靜態常量
固定修飾符 public static final
無論寫不寫 挑著寫 都是這個修飾符 不變
成員方法
固定修飾符 public abstract
無論寫不寫 挑著寫 都是這個修飾符 不變
抽象類和介面的區別
1.成員的區別
抽象類:
成員變數: 可以是變數,也可以是常量
構造方法:有構造方法,用於子類實例化使用
成員方法:可以是抽象的,也可以是非抽象的
介面:
成員變數:只能是常量
預設修飾符:public static final
成員方法:只能是抽象的
預設修飾符:public abstract
推薦:預設修飾符請永遠自己手動給出
2.類和介面的關係區別
類與類:
繼承關係,只能單繼承,可以多層繼承
類與介面:
實現關係,可以單實現,也可以多實現
類還可以繼承一個類的同時實現多個介面
介面與介面:
繼承關係,可以單繼承,也可以多繼承
3.體現的理念不同
抽象類裡面定義的都是一個繼承體系中的共性內容
介面是功能的集合是一個體系額外的功能,是暴露出來的規則
一切使用父類/介面引用的地方 都可以傳入其子類/實現類對象
多態
同一個對象,在不同時刻體現出來的不同的狀態
舉例:水(水,冰,水蒸氣)
貓(貓,動物)
前提:
A: 有繼承或者實現關係
B: 有方法的重寫
C: 有父類的引用指向子類對象
多態中的成員使用特點
Fu fz=new Zi();
多態時 所有表現形式都是父類的表現形式
只有調用方法時,運行的是子類重寫的方法
1.成員變數
編譯看左邊 運行看左邊
2.成員方法
編譯看左邊 運行看右邊
1 class Fu{ 2 int num=4; 3 void show(){ 4 system.out.println("showFu") 5 } 6 7 } 8 class Zi extends Fu{ 9 10 int num=5; 11 void show(){ 12 system.out.println("showZi"); 13 } 14 } 15 class T{ 16 public static void main(String args[]){ 17 Fu f=new Zi(); 18 system.out.println(f.num); 19 f.show(); 20 } 21 }
多態中的轉型
1.向上轉型
把子類對象賦值給父類(介面)的引用 自動類型提升
int a=0; double b=a;
Fu fz=new Zi();
2.向下轉型
把父類(介面)的引用強制轉換成子類對象
double b=10.0;
int a=(int)b;
Fu fz=new Zi();
Zi zi=(Zi)fz;
註意:Fu fu=new Fu()不能向下轉型 會報ClassCastException類型轉換異常
多態的好處及弊端
1.好處
提高了程式可維護性和可擴展性
2.弊端
不能適用子類特用內容
要想使用,要麼向下轉型,要麼重新創建子類對象
多態的三種形式
1.具體的類多態 父類 變數名 =new 子類()
2.抽象類多態 父抽象類 變數名=new 子類()
3.介面多態 介面 變數名 =new 實現類()
instanceof關鍵字
格式:對象名 instanceof類名
返回值:true false
作用:判斷指定的對象 是否為給定類創建的對象
Animal a1=new Cat();
Animal a2=new Dog();
method(a1)
public static void method(Animal a){
if(a instanceof Cat){
向下轉型
調用貓特有的方法
}
}