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

看板java作者 (風中夢想水中流)時間8年前 (2016/03/19 14:22), 編輯推噓4(4023)
留言27則, 6人參與, 最新討論串1/1
想請教版上大大~ 若有兩個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(); } 以上兩種方法都可以達到只維護一邊程式 但不知道哪個方式比較適合? 再請教版上大大了 謝謝! -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 140.134.38.55 ※ 文章網址: https://www.ptt.cc/bbs/java/M.1458368531.A.972.html

03/19 14:44, , 1F
繼承是定義類別間的關係,不只是程式共用
03/19 14:44, 1F

03/19 14:45, , 2F
看你的A B是不是真的可以有個共通的父類別且methodABC真的
03/19 14:45, 2F

03/19 14:45, , 3F
是那個父類別的行為
03/19 14:45, 3F

03/19 15:54, , 4F
如果能把A和B當成C看待,再來考慮繼承
03/19 15:54, 4F

03/19 15:55, , 5F
如果A和B之間八竿子打不著那就用方法二
03/19 15:55, 5F

03/19 17:10, , 6F
is與has的差別?
03/19 17:10, 6F

03/20 01:14, , 7F
看需求啊, 如果像一樓講的, AB都是共用C, 那就繼承
03/20 01:14, 7F

03/20 01:14, , 8F
反之就是第二種方法抽共用
03/20 01:14, 8F

03/20 02:58, , 9F
兩者關係先搞清楚,別為了共用而隨便繼承@@
03/20 02:58, 9F

03/22 13:44, , 10F
如果暫時無法決定,那可以參考 SDK 與 MFC 的關係
03/22 13:44, 10F

03/22 13:44, , 11F
SDK 是一大堆 c standard, 沒有 this 指標,但參數很多
03/22 13:44, 11F

03/22 13:45, , 12F
使用不易;在其上架起 MFC 是 c++ interface,才去描述繼
03/22 13:45, 12F

03/22 13:45, , 13F
承關係。
03/22 13:45, 13F

03/22 13:46, , 14F
可以說兩個方式都用上了;但你如果'先'繼承,那被包在裡
03/22 13:46, 14F

03/22 13:46, , 15F
面的函式可以說是抽不出來了..
03/22 13:46, 15F

03/22 13:47, , 16F
變成要使用這個函式,就免不了先替它生一個物件..
03/22 13:47, 16F

03/22 19:43, , 17F
怎麼會抽不出來,父類別那個method裡的實作直接抽出來成
03/22 19:43, 17F

03/22 19:44, , 18F
static method,原method再去call就好了
03/22 19:44, 18F

03/22 19:46, , 19F
重點還是在繼承不只是程式共用
03/22 19:46, 19F

03/24 13:44, , 20F
所以我想了很久,用"可以說是"這個字眼,代表還有點餘地
03/24 13:44, 20F

03/24 13:44, , 21F
如果用繼承達成自然共用,很大的問題是函式被劃在某個圈
03/24 13:44, 21F

03/24 13:45, , 22F
圈裡;沒劃在這個圈圈裡的,以後"可以說是"無法使用它了
03/24 13:45, 22F

03/24 13:45, , 23F
當然用 public static 可以拉出來;事實上 compiler 實作
03/24 13:45, 23F

03/24 13:46, , 24F
puclic static 和 global 差不多啊 :P,都沒有 this 指標
03/24 13:46, 24F

03/24 13:46, , 25F
而先寫一堆 global,彼此間完全平等,再往上架會容易點
03/24 13:46, 25F

03/24 13:47, , 26F
幾年前我參與一個專案,以同一套邏輯套在兩百個型號的手
03/24 13:47, 26F

03/24 13:47, , 27F
機上,當時我們很自然一支手機一個 class(下班再說)
03/24 13:47, 27F
文章代碼(AID): #1MxF0Jbo (java)