2017-06-26 42 views
2
interface abc 
{ 
    ... 
} 

假設我有方法返回類型爲Object且接口類型爲abc接口作爲參考變量

class xyz 
    { 

    Object meth() 
    { 
     ... 
    } 

    abc meth2() 
    { 
     ... 
    } 

    public static void main (String args[]) 
    { 
     xyz x = new xyz() ; 

     Object a = x.meth() ; 

     abc c = x.meth2() ; 
    } 
} 

我不想實現接口abc。 引用變量c的類型是abc,但c的對象類型是什麼? 我們不能創建接口的對象,所以它可能是什麼?例如: sup s = new sub(); //其中sub是sup的子類。這裏sup是返回類型,sub是對象類型。

+0

完全合格的名稱你打算如何實現方法'meth2',而無需創建'abc'的對象,除非你回'null'?在後一種情況下,'c'的值將是'null'。 – anacron

+2

請堅持到Java命名約定(如'Abc'的類型),如果你想類型的對象'abc',你_must_定義實現它(雖然它可能是一個匿名類)類的ident代碼 – c0der

+0

。我不清楚你如何在沒有實現接口的情況下認爲你可以做任何有用的事情。 – ajb

回答

1

c的基本類型可以是實現abc的任何東西。實際類型取決於您的實施meth2

「但是在我的代碼中,雖然沒有實現abc!」你說。如果沒有執行abc,則無法執行meth2。它永遠不會返回正確的值,因爲如果沒有類型實現abc,它將無法創建與abc兼容的類型。

然而,在meth2,您可以創建所謂的「匿名類」:

return new abc() { 
    // all the methods required by abc will be put here... 
}; 

在編譯過程中,這個匿名類會變成一個內部類實現abc封裝類的,和這將有類似yourpackage.EnclosingClass$1

0

爲了回答您的問題,您必須先考慮編寫meth2()的可能方法。您必須在某處實施ABC界面。你可以做這樣的事情:

ABC meth2() { 

    return new ABC(){ 
     // Implement the methods that are defined in ABC interface 
    }; 
} 
0

的方法meth2只能返回null或實現接口abc一個類的實例。