繼承,接口,多態的綜合練習

"世界萬物皆有接口",今天看到這句話瞬間感覺在沒接觸IT之前的世界觀有問題,哈哈大笑

今天介紹一個用到了繼承,接口,多態的綜合例題,思路不難,綜合性比較強,適合新手練習用.

考覈知識點

    繼承

    接口

    類實現接口

    多態(向上轉型)

    向下轉型

    例題描述

請使用代碼描述:   

奧迪車(Audi)都具有跑的功能,但是智能奧迪車(SmartAudi)除了具有跑的功能外,還具有自動泊車(automaticParking)和無人駕駛(automaticDrive)的功能!

要求:在測試類中創建Audi車對象和智能奧迪車對象,分別調用各自方法; 然後測試向上轉型(轉換爲父類類型和實現的接口類型)和向下轉型.

    代碼描述

請使用代碼描述:   

奧迪車(Audi)都具有跑的功能,但是智能奧迪車(SmartAudi)除了具有跑的功能外,還具有自動泊車(automaticParking)和無人駕駛(automaticDrive)的功能!

要求:在測試類中創建Audi車對象和智能奧迪車對象,分別調用各自方法; 然後測試向上轉型(轉換爲父類類型和實現的接口類型)和向下轉型.

    操作步驟描述

定義奧迪車類(Audi)

成員方法: 跑(run())

輸出格式: 奧迪車在跑

定義智能接口(Smart)

抽象方法: 自動泊車(automaticParking)和無人駕駛(automaticDrive)

定義智能奧迪車類(SmartAudi) 繼承Audi實現Smart接口

成員方法

實現automaticParking方法

輸出:智能奧迪車在自動泊車

實現automaticDrive方法

輸出:智能奧迪車在無人駕駛

定義測試類Test

提供main方法

在main方法中

創建Audi車對象 a,調用跑方法

創建SmartAudi車對象 sa,調用跑,自動泊車,自動駕駛方法

定義Audi類型的變量 aa 把sa賦值aa; 測試aa只能調用run方法,不能調用其他方法

判斷如果aa是SmartAudi的實例對象, 把aa強制轉換爲saa;使用saa調用自動泊車和自動駕駛方法

定義Smart類型的變量 s,把sa賦值給s,測試只能調用自動泊車和自動駕駛方法,不能調用run方法.

/*

 定義奧迪車類(Audi)

      成員方法: 跑(run())

           輸出格式: 奧迪車在跑

 */

publicclass Audi {

//   成員方法: 跑(run())

//         輸出格式: 奧迪車在跑

      publicvoid run(){

           System.out.println("奧迪車在跑");

      }

}

/*

 定義智能接口(Smart)

      抽象方法: 自動泊車(automaticParking)和無人駕駛(automaticDrive)

 */

publicinterface Smart {

//   自動泊車(automaticParking)

      publicabstractvoid automaticParking();

//   無人駕駛(automaticDrive)

      publicabstractvoid automaticDrive();

}

/*

 定義智能奧迪車類(SmartAudi) 繼承Audi實現Smart接口

      成員方法

      實現automaticParking方法

           輸出:智能奧迪車在自動泊車

      實現automaticDrive方法

           輸出:智能奧迪車在無人駕駛

 */

publicclass SmartAudi extends Audi implements Smart {

 

//   實現automaticParking方法

      publicvoid automaticParking() {

           System.out.println("智能奧迪車在自動泊車");

      }

//  實現automaticDrive方法

      publicvoid automaticDrive() {

         System.out.println("智能奧迪車在自動駕駛");

      }

}

 

/*

定義測試類Test

      提供main方法

      在main方法中

           創建Audi車對象 a,調用跑方法

           創建SmartAudi車對象sa,調用跑,自動泊車,自動駕駛方法

           定義Audi類型的變量aasa賦值aa; 測試aa只能調用run方法,不能調用其他方法

           判斷如果aa是SmartAudi的實例對象, 把aa強制轉換爲saa;使用saa調用自動泊車和自動駕駛方法

           定義Smart類型的變量 s,把sa賦值給s,測試只能調用自動泊車和自動駕駛方法,不能調用run方法.

 */

publicclass Test {

      publicstaticvoid main(String[] args) {

//         創建Audi車對象 a,調用跑方法

           Audi a = new Audi();

           a.run();

//         創建SmartAudi車對象sa,調用跑,自動泊車,自動駕駛方法

           SmartAudi sa = new SmartAudi();

           sa.run();

           sa.automaticParking();

           sa.automaticDrive();

//         定義Audi類型的變量aasa賦值aa; 測試aa只能調用run方法,不能調用其他方法

           Audi aa = sa;

           aa.run();

//         aa.automaticParking();編譯報錯

//         aa.automaticDrive();   編譯報錯

//         判斷如果aa是SmartAudi的實例對象, 把aa強制轉換爲saa;使用saa調用自動泊車和自動駕駛方法

           if(aainstanceof SmartAudi){

                 SmartAudi saa = (SmartAudi) aa;

                 saa.automaticParking();

                 saa.automaticDrive();

           }

//         定義Smart類型的變量 s,把sa賦值給s,測試只能調用自動泊車和自動駕駛方法,不能調用run方法.

           Smart s = sa;

           s.automaticDrive();

           s.automaticParking();

//         s.run();編譯報錯

      }

}

 ==========================================\

這裏面提到了向上轉型和向下轉型,介紹一下這兩種類轉型的格式和一些注意事項

 java中類的轉型可以分成兩種:

1. 向上轉型, 格式: 父類類型   變量名  = 子類對象;

                       或者: 接口類型   變量名  = 實現類對象;

2. 向下轉型,格式: 子類類型  變量名  = (子類類型)父類變量名;

如果避免類型轉換異常呢?

需要使用到關鍵字:instanceof

 使用格式:

  boolean b = 對象A  instanceof 類A;

  解釋: 判斷對象A是否是類A的一個實例(對象)

 解決問題: 避免類型轉換異常



 

 

 

 



發佈了56 篇原創文章 · 獲贊 3 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章