Re: [問題] 多繼承super的問題

作者: bleed1979 (十三)   2014-12-19 18:53:22
※ 引述《egheee (阿平)》之銘言:
: 標題: [問題] 多繼承super的問題
: 時間: Fri Dec 19 12:15:54 2014
:
: 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()呢?
推文有提到如果C要call A的tell(),何不直接繼承A,或另寫方法,或建立物件。
這些都要改寫原程式碼。
bleed1979看了一下程式碼,覺得大概也只能改寫了。
提供我的建議(依照改動程度小至大):
1.建立物件:
class C extends B {
void tell() {
(new A()).tell();
out.println("this is C");
}
}
2.另寫方法:
class B extends A {
void tell() {
out.println("this is B");
}
void tellByA() {
super.tell();
}
}
class C extends B {
void tell() {
tellByA();
out.println("this is C");
}
}
3.static:
class A {
static void tell() {
out.println("this is A");
}
}
class B extends A {
static void tell() {
out.println("this is B");
}
}
class C extends B {
static void tell() {
A.tell();
out.println("this is C");
}
}
特別注意,bleed1979反對改寫為直接繼承A。
這個提議雖然是可以直接呼叫A的tell(),
但動到原有架構,為不可行的方案。
應該還有其他方法,就待版友補完吧。
:
:
作者: adrianshum (Alien)   2014-12-30 22:50:00
(new A()).tell() 錯得離譜。意思完全不一樣好不好

Links booklink

Contact Us: admin [ a t ] ucptt.com