Java多態知識整理

一、多態

多態是同一個行爲具有多個不同表現形式或形態的能力。多態就是同一個接口,使用不同的實例而執行不同操作。

二、優點

1.消除類型之間的耦合關係

2.可替換性

3.可擴充性

4.接口性

5.靈活性

6.簡化性

三、條件

1.繼承(或實現接口)

2.重寫

3.父類引用指向子類對象

四、實例

例1:

//定義父類
public class Father {
    //定義方法
    public void fun(){
        System.out.println("我是父類中的方法!");
    }

}
//定義子類,繼承父類
class Son extends Father{
    //重寫父類中的方法
    @Override
    public void fun() {
        System.out.println("我是重寫後的方法!");
    }
}
//測試類
class Test{
    public static void main(String[] args){
        //多態體現,父類引用指向子類對象
        Father f = new Son();
        //調用重寫後的方法
        f.fun();
    }
}

注意:

1.當使用多態方式(父類引用)調用方法時,首先檢查父類中是否有該方法,如果沒有,則編譯錯誤;如果有,再去調用子類的同名方法。

2.當使用多態方式(父類引用)調用成員變量時,首先檢查父類中是否定義了該變量,如果沒有,編譯錯誤,如果有,使用父類定義的成員變量。

例2:

//定義父類
public class Father_2 {
   //父類中的成員變量
    int a = 10;
}
//定義子類,繼承父類
class Son_2 extends Father_2{
   //子類中的成員變量
    int a = 12;
}
//測試類
class Test_2{
    public static void main(String[] args){
        //多態體現
        Father_2 f2 = new Son_2();
        //調用成員變量,結果輸出的時父類中的成員變量
        System.out.println(f2.a);
    }
}

五、向上、向下轉型

向上轉型:

當有子類對象賦值給一個父類引用時,便是向上轉型,多態的本身其實就是向上轉型的過程。

向下轉型:

一個已經向上轉型的子類對象,使用強制類型轉換,將父類引用轉換爲子類引用,這個過程稱之爲向下轉型。(直接創建父類對象,無法向下轉型)

想要使用子類的成員變量或其特有的方法,需要使用到向下轉型。

例:

//定義父類
public class Father_3 {
   //父類中的成員變量
    int a = 10;
    //定義方法
    public void fun(){
        System.out.println("我是父類中的方法!");
    }
}
//定義子類,繼承父類
class Son_3 extends Father_3{
   //子類中的成員變量
    int a = 12;
    //重寫父類中的方法
    @Override
    public void fun() {
        System.out.println("我是重寫後的方法!");
    }
    //子類特有的方法
    public  void fun_2(){
        System.out.println("我是子類特有的方法!");
    }
}
//測試類
class Test_3{
    public static void main(String[] args){
        //多態體現,此過程爲向上轉型
        Father_3 f3 = new Son_3();
        //向下轉型,強制轉換
        Son_3 s3 = (Son_3)f3;
        //調用子類特有的成員
        s3.fun_2();
        System.out.println(s3.a);
    }
}

六、instanceof運算符

instanceof是一個比較運算符,它用來判斷一個引用類型是否屬於某個類型(要有繼承和實現關係)的對象。

例:
 

//定義“人”類
public class Person {

    public  void eat(){
        System.out.println("人都要吃飯!");
    }

}
//定義“我” 類,繼承“人”類
class My extends Person{

    public void eat(){
        System.out.println("我是人,我也要吃飯!");
    }

}
//定義測試類
class Test_4{
    public static void main(String[] args) {
        //多態體現
        Person p = new My();
        //判斷p 是否屬於Person類型
        if (p instanceof Person) {
            System.out.println(true);
        }
        //判斷p 是否屬於 My 類型
        if (p instanceof My) {
            System.out.println(true);
        }
    }
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章