[问题] 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