Java之多態
一、多態
1、含義
一種類型,呈現多種狀態。主要關註類多態、方法多態。
2、多態的前提:繼承
使用父類引用指向子類對象:
Animal a1 = new Cat();
Object a1 = new Cat();
3、多態的三大定理
1)對象不變,new Cat();不會變為Dog對象;
2)編譯時只能調用編譯時類型已定義的方法,a1.eat();不能調用Animal未定義的方法,不能調用Animal未定義的方法;
3)運行時調用的是運行時類型覆蓋後的方法 ;(調用的是什麽?) (非static)
4、對定理2的補充
無法調用子類特有的方法,采用強制類型轉換,需要註意類型的判斷,避免ClassCastException(類型轉換異常。
if(a1 instanceof Dog){
Dog d1 = (Dog)a1;
d1.watchHouse();
}
5、多態的分類
1)基本類型多態
2)類多態
3)方法多態
a、編譯時多態:重載
編譯時決定調用哪個方法
b、運行時多態:覆蓋
運行時決定調用哪個方法
6、多態的應用
思路:面向父類編程 ->抽象 -> 通用;
適合做設計,形成通用的程序(框架技術)
(1)在方法的參數表中使用多態
public void feed(Animal a1,Animal a2)
參數可以傳入任何Animal以及子類的對象;
public void foo(Object obj)
參數可以傳入任何的對象,什麽都“is-a”Object
(2)在方法的返回值類型使用多態
結合設計模式:工廠模式——降低代碼的耦合度,解耦合;
public class AnimalFactory{
public static Animal getAnimal(int msg){
Animal a1 = null;
switch(msg){
case 1: a1 = new Cat(); break;
case 2: a1 = new Dog(); break;
case 3: a1 = new Cat(); break;
default;
}
return a1;
}
}
使用時:
Animal a1 = AnimalFactory.getAnimal(1);
Animal a1 = AnimalFactory.getAnimal(3);
代碼只和Animal和AnimalFactory有關,如果需要改變獲得的產品,只需修改工廠類,降低diamante的耦合度,提高軟件的可復用性、易維護性。
(3)一視同仁
Animal[] as = new Animal[5];
for(int i=0;i<as.length;i++){
as[i].eat("sd");
}
需求分析:得到《需求規格說明書》
是軟件分析、設計、開發、測試、維護等重要依據
系統分析:問題空間--OOA
根據名詞、動詞將問題進行分類和歸納;
系統設計:解空間--OOD
軟件建模,使用UML語言;(屬於軟件工程中內容)
UML統一建模語言,特點:使用各種圖形表達設計;
(1)靜態建模
1)用例圖:use-case
2)類圖(重點)class -dia
表示類的信息、以及類間的關系(比如繼承)
(2)動態建模
1)時序圖:系統功能不同步驟、按照時間順序表示;
對象的生命周期:從創建-> 反復使用 -> 銷毀
關註:使用UML工具類圖,進行設計。
日常工具:紙和筆、意念;
專業工具:ration公司Rose,被IBM收購了;Sybase公司PowerDesigner,除了數據庫設計,也能設計UML;
MyEclipse提供了UML插件(正版的)
需求:設計變形金剛類
BXJG類是所有變形金剛的父類,
屬性:id、name、age;
構造方法:無參、有參;
業務方法;fire開火、public void fire()、show自報家門、public void show();、
具備三個子類:QingTZ、DaHF、WeiZT
作業;根據UML圖,對bxjg類加以實現,並使用
創建不同子類對象
1擎天柱5000;
2大黃蜂3000
3威整天4500;
讓所有變形金剛一起開火,開火前先自報家門。
Java之多態