2011-10-15 48 views
1

那家說如何從一個盛大的父類調用一個方法?

如果類A擴展B類和B類擴展C.,他們都有方法測試()

如何調用該方法測試考試的一個問題是,在C級在A班?

我愚蠢地選擇了。 Super.super.test()。我認爲這是錯誤的。

釷其他選項分別爲:

測試() Super.test()。我想過這個。但是,如果我使用它,它將調用B類中的方法,B類將調用C類中的方法,但我們只希望C

對不起,如果這不是很清楚或沒有組織完成考試,並有點暈。

回答

3

這是不可能的。只有通過調用超類方法,該方法又調用其超類中的方法(C)

+0

我知道它「shiii *」。問題是明確表示從盛大類調用的問題。如果我使用super(),它會調用父級和父級。這個問題是不公平的。 :( –

+0

@MohammadFadin,有沒有「非上述」選項? –

+0

是:(不要告訴我這是正確的答案:( –

1

這在C++中可能,但在Java中不可能。 super總是將您重定向到直接父母。

4

你無法訪問超級超類的方法。如果B類在運行時自動覆蓋它,將運行B類中包含的兩條指令,如類C中所示。現在,如果確保B類中沒有實現指令,那麼只會自動執行C類。

如果B類具有您不想運行的指令,請通過更改名稱並使用標識super從類A運行來複制該方法。

0

在java中不允許使用super.super()。嘗試這種方式,如果你真正想要的,你可以自己實現一個:

public class abc { 
     public void myName(){ 
      System.out.println("abc"); 
     } 
    } 

    public class def extends abc { 
     public void myName(boolean flag){ 
      if(flag){ 
       super.myName(); 
      }else { 
       System.out.println("def"); 
      } 
     } 
    } 



    public class mno { 
     public static void main(String[] args){ 
      def d = new def(); 

      System.out.print("This returns the so called 'super.super' : "); 
      d.myName(true); 

     } 
    } 

輸出:這將返回所謂的「super.super」:ABC

0

我會想象下面會打印出「A」。我沒有一個方便的編譯器來試用它。

class A 
{ 
    private void test () { System . out . println ("A") ; } 

    public static void main (String [ ] args) 
    { 
      C c = new C () ; 
      c . test () ; 
    } 
} 


class B extends A 
{ 
    private void test () { System . out . println ("A") ; } 
} 


class C extends B 
{ 
    private void test () { System . out . println ("A") ; } 
} 
+0

明天早上我會檢查。謝謝emory :) –

相關問題