為什么使用多態?實現多態的有哪些方式


實現多態的兩種方式
  一、什么是多態?

        父類類型的變量指向子類創建的對象,使用該變量調用父類中一個被子類重寫的方法,則父類中的方法呈現出不同的行為特征,這就是多態。

        簡單的來說編譯時方法行為表現的是父類中的方法,運行時方法行為表現的是子類中重寫該方法的行為特征

二、為什么使用多態?

       1、實現代碼的復用,避免代碼的冗余;

       2、減少代碼之間的關聯性,即耦合度,方便后期對代碼的修改,功能的改善,不必牽一發而動全身,減少不必要的麻煩;

       3、能夠通過重寫子類的方法,使不同的對像具有不同的功能,擴展了功能。

       3、舉例說明

//哺乳類
piublic class Mammal
public void move(){
System.out.println("會移動!");
}
}

//鯨魚類
public class Whale extends Mammal{
public void move() {
System.out.println("靠魚鰭移動!");
}
}

//蝙蝠類
public class Bat extends Mammal{
public void move() {
System.out.println("靠翼移動!");
}
}

//如果有很多個哺乳類動物的話,每一次都要重新定義一個move方法,很麻煩且代碼冗余影響運行的速度

public class Main{

public static void main(String[] args) {
Whale whale = new Whale();
whale.move();

Bat bat = new Bat();
bat.move();

}

}

//我們可以這樣修改

public class Main{

public static void main(String[] args) {

Mammal mammal1 = new Whale();//使用上轉型每次只需要重寫子類的方法就可以,不需要重新定義方法
Mammal mammal2 = new Bat();
mammal1.move();
mammal2.move();

}
}
 

  三、多態的實現方式

          1、上轉型對象實現多態

              1.1、上轉型對象與下轉型對象 

                      上轉型對象:子類創建的對象賦值給父類聲明變量,則該對象稱為上轉型對象,這個過程稱為對象上轉型,對應於                 數據類型轉換中的自動類型轉換;

                      下轉型對象:上轉型對象再強制轉換為創建該對象的子類類型的對象,即將上轉型對象還原為子類對象,對應於數                  據類型轉換中的強制類型轉換。

                       注意:①上轉型對象才能夠對象下轉型;

public class Test {
public static void main(String[] args) {
Mammal mammal = new Whale();//下轉型對象
Whale whale =(Whale) mammal;//下轉型對象,還原為鯨魚類
}
}
                                  ②上轉型對象不能操作子類新增的成員變量,不能調用子類新增的方法,因此如果要使用子類新增的屬性                                         必須下轉型

 

              1.2、上轉型對象實現多態實例

//哺乳類(父類)
public class Mammal{
public void move(){
System.out.println("移動");
}
}
//鯨魚類(繼承自哺乳類)
public class Whale extends Mammal{
public void move(){
System.out.println("靠魚鰭移動");
}
}
//測試類
public class Test {
public static void main(String[] args) {
Mammal mammal = new Whale();//上轉型對象,父類類型的變量指向子類聲明的對象
mammal.move();
}
}
 

  運行結果:運行結果表現出來的是Mammal里move方法的行為特征,編譯時表現為父類的move方法的行為特征 ,多種行為狀態,即為                        多態

 

     2、接口回調實現多態                      

                 2.1、什么是接口回調? 

                      接口回調描述的是一種現象:接口聲明的變量指向其實現類實例化的對象,那么該接口變量就可以調用接口中的抽象方法,

                 編譯時方法行為表現的是接口中的抽象方法,運行時方法行為表現的是接口實現類中重寫該方法的行為特征,即為多態

                 2.2、接口回調實現多態實例

//接口
public interface IMammal {
void move();
}
public class Whale implements IMammal{
public void move(){
System.out.println("靠魚鰭移動");
}
}
public class Test {
public static void main(String[] args) {
IMammal mammal = new Whale();
mammal.move();
}
}
  運行結果:編譯時是接口的行為特征,運行時是接口實現類的行為特征

 

3、接口回調與上轉型對象實現多態的區別與聯系

    ①上轉型對象多態的父類是普通類,接口回調都是父類是接口;

    ②接口回調父類方法更加的簡潔,是抽象方法不需要有方法體;

    ③都是編譯時顯示父類方法行為特征,運行時顯示子類行為特征。
--------------------- 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM