1. 程式人生 > >java之上轉型物件

java之上轉型物件

1. 上轉型物件

上轉型物件是將子類的物件賦值給父類的引用,形如: SuperClass sup = subClass;

上轉型物件不能使用子類新增成員(包括成員變數,成員方法),只能使用子類重寫父類的方法,
被子類隱藏的父類變數;子類未重寫的父類方法,未被隱藏的父類成員變數.


-----------------示例運用(多型的運用)--------------------
假如你在一個物流運輸公司,有個客戶要求你為他運輸一定數量的產品到某地,使用某種交通工具.那我們假設你的管理程式中有Truck類,Train類,Plane類專門用來實現使用不同交通工具的成本計算,都有方法cost(Double weight,Double space);那麼,問題出來了.客戶對於運輸器種類是可選擇的,你是不是要對每種運輸器new個例項放到不同的service方法中為客戶服務呢?
很明顯這麼做有很多程式碼重複,而且效率太低.那麼為什麼不構造一個運輸工具的父類:
public class Conveyance{
protected weight;
protected space;
public abstract Double cost(Double weight,Double space);
}
然後子類Truck,Plane,Train分別實現cost方法
再構造一個工廠類為客戶製造子類例項
public class ConveyanceFactory{
public static Conveyance getConveyance(String which){
if(which.equils("Truck")){return new Truck();}
else if(which.equils("Train")){return new Train();}
else if(which.equils("Plane")){return new Plane();}
else{return null;}
}
}
服務程式的方法實現:
public double transportCost(String type,Double weight,Double space){
Conveyance c;Double cost;
c = ConveyanceFactory.getConveyance("type");
cost = c.cost(weight,space);
return cost;
}
看上面服務層的程式碼多簡單‘,而且在MVC層次結構中方法和類的設計也和麵向物件.這就是上塑造型給我們帶來的好處咯
這回就方便了,需要Truck的時候,客戶只要告訴你他要用卡車運輸運多少距離多遠.那業務員就在option按扭裡面選擇”卡車”在文字框裡輸入重量多少距離多遠.veiw層把資料傳給controler處理成我們的服務程式需要的資料型別.然後服務程式被controler呼叫,用transportCost方法計算出成本返回給veiw,顯示給業務員,業務員就可以告訴客戶需要支付多少錢啦‘