[問題] Jave繼承與共用類別的差別

作者: image73 (風中夢想水中流)   2016-03-19 14:22:03
想請教版上大大~
若有兩個calss都有一樣的method且實作都一樣
public class A {
....
private void methodABC {
.....
}
}
public class B {
.....
private void methodABC {
}
}
目前想到兩個方式不用維護兩邊的code:
想要把method1()的實作抽出來,如此程式就不用維護兩個地方
目前想到:
方法一:把共用抽成父類別(C)
public class C {
public mehotdABC(){
}
}
public class A extends C {
super.methodABC();
}
publlic class B extends C {
ssuper.methodABC();
}
方法二:抽成共用類別
public static class commomUtils {
public void methodABC(){
}
public classA {
commonUtils.methodABC();
}
public classB {
commonUtils.methodABC();
}
以上兩種方法都可以達到只維護一邊程式
但不知道哪個方式比較適合?
再請教版上大大了
謝謝!
作者: ssccg (23)   2016-03-19 14:44:00
繼承是定義類別間的關係,不只是程式共用看你的A B是不是真的可以有個共通的父類別且methodABC真的是那個父類別的行為
作者: Frozenmouse (*冰之鼠*)   2016-03-19 15:54:00
如果能把A和B當成C看待,再來考慮繼承如果A和B之間八竿子打不著那就用方法二
作者: james732 (好人超)   2016-03-19 17:10:00
is與has的差別?
作者: dream1124 (全新開始)   2016-03-20 01:14:00
看需求啊, 如果像一樓講的, AB都是共用C, 那就繼承反之就是第二種方法抽共用
作者: cha122977 (CHA)   2016-03-20 02:58:00
兩者關係先搞清楚,別為了共用而隨便繼承@@
作者: HuangJC (吹笛牧童)   2016-03-22 13:44:00
如果暫時無法決定,那可以參考 SDK 與 MFC 的關係SDK 是一大堆 c standard, 沒有 this 指標,但參數很多使用不易;在其上架起 MFC 是 c++ interface,才去描述繼承關係。可以說兩個方式都用上了;但你如果'先'繼承,那被包在裡面的函式可以說是抽不出來了..變成要使用這個函式,就免不了先替它生一個物件..
作者: ssccg (23)   2016-03-22 19:43:00
怎麼會抽不出來,父類別那個method裡的實作直接抽出來成static method,原method再去call就好了重點還是在繼承不只是程式共用
作者: HuangJC (吹笛牧童)   2016-03-24 13:44:00
所以我想了很久,用"可以說是"這個字眼,代表還有點餘地如果用繼承達成自然共用,很大的問題是函式被劃在某個圈圈裡;沒劃在這個圈圈裡的,以後"可以說是"無法使用它了當然用 public static 可以拉出來;事實上 compiler 實作puclic static 和 global 差不多啊 :P,都沒有 this 指標而先寫一堆 global,彼此間完全平等,再往上架會容易點幾年前我參與一個專案,以同一套邏輯套在兩百個型號的手機上,當時我們很自然一支手機一個 class(下班再說)

Links booklink

Contact Us: admin [ a t ] ucptt.com