[問題] 多繼承super的問題

作者: egheee (阿平)   2014-12-19 12:15:54
class A {
void tell() {
Log.e("", "I am a");
}
}
class B extends A{
void tell() {
Log.e("", "I am b");
}
}
class C extends B {
void tell() {
super.super.tell(); // 問題
Log.e("", "I am c");
}
}
如上列所示,這樣的寫法是有問題的,super好像規定只能用一次
請問我要怎麼從C裡面call到A的tell()呢?
作者: sCHb68 (sCHb68)   2014-12-19 12:31:00
在 class C 正確用一個 super ,然後在 class B 再使用 super 不知能否解決原PO問題。
作者: egheee (阿平)   2014-12-19 14:06:00
我就是想要跳過B直接call A的,這樣的方式會連B一起call到
作者: gpctv (gpctv)   2014-12-19 14:55:00
那為何不直接在C建立物件就可直接call C的tell方法啦?!不曉得這樣你懂不懂我的意思
作者: ssccg (23)   2014-12-19 15:04:00
class封裝來說,繼承就是取得parent的非private的member但是parent又去繼承了什麼東西是parent class的實作細節child class知道parent有tell(),但不該知道parent的第幾層parent有個tell(),那不是由繼承能使用的介面你想跳過B這件事就有問題了,C本來就不該知道B是繼承了什麼C只知道B提供什麼,不知道那是B自己實做還是繼承來的
作者: Peruheru (還在想)   2014-12-19 15:08:00
所以你如果要A的什麼,你應該是去繼承A,而不是繼承B不然就是B當初設計就要為A的tell()另外提供一個方法比如說tellbyA之類的B表示:朕不給的,你不能要
作者: swpoker (swpoker)   2014-12-19 15:14:00
has is use
作者: gpctv (gpctv)   2014-12-19 15:36:00
樓上說的其實很有道理,但是你硬要這樣做那就建立物件吧!http://pastie.org/9789546

Links booklink

Contact Us: admin [ a t ] ucptt.com