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