多型只能透過方法調用表現,雙重分派需執行兩次方法調用:各結構各一次判斷類型。Trash 結構使用 addToBin(TypedBin[] tb) 遍歷陣列嘗試加入適當垃圾筒——雙重分派發生點。新建 TypedBin 階層含 add() 方法應用多型,關鍵在 add() 經「多載」處理可接受不同垃圾類型參數。雙重分派關鍵點涉及多載。
基礎類 Trash 必須含 addToBin()。無原始碼控制權時:將 addToBin() 置入介面 TypedBinMember,保持 Trash 不變,繼承新特定類型 DDAluminum/DDPaper/DDGlass/DDCardboard。
TypedBinMember 介面:boolean addToBin(TypedBin[] tb)。
四大具體 Trash 子類:實作 addToBin() 遍歷陣列呼叫 tb[i].add(this),參數 this 類型各異(第一次分派)。
TypedBin 抽象基礎類:Vector v、addIt() 加入集合、四個 add() 多載預設返回 false(未多載時繼續尋找)。
四大具體 Bin 子類:各多載對應 add() 呼叫 addIt() 返回 true,其餘繼承 false。
TrashBinSet:封裝各類 TypedBin 陣列,sortIntoBins() 執行雙重分派分類、binSet() 取得陣列。
主程式:ParseTrash.fillBin() 填充主筒、sortIntoBins() 分類、遍歷各 Bin 執行 Trash.sumValue() 及主筒總計。
結構建立後分類極簡單。兩次動態方法調用效率可能優於其他排序方法。main() 便利性、類型資訊獨立性佳。新增類型改動隔離:繼承 Trash 新類型含 addToBin()、繼承新 TypedBin、加入 TrashBinSet 初始化。