簡體   English   中英

如果方法返回接口,返回什么?

[英]What to return if a method returns an interface?

我給了一組接口,並且必須創建一個實現這些接口的類,但是,我對引用其他接口的接口的返回類型感到困惑。

//在下面實現C類,以便代碼編譯。 這些方法都不會返回null。 //如果願意,您可以定義補充類(內部類或“常規”類)。 //注意C是Object的子類,它只實現X和Y - 你不能改變它。

abstract class A {
abstract void q ();
}

interface Y {
int p (int j);
A me ();
}

interface X {
void m (Object o);
X n ();
}

class C implements X, Y {
// Write your code here -- make all methods public (otherwise,
// the compiler will not consider the interfaces to be "implemented")!

    @Override
public int p(int j) {
    // TODO Auto-generated method stub
    return 0;
}

@Override
public A me() {
    // TODO Auto-generated method stub
    return null;
}

@Override
public void m(Object o) {
    // TODO Auto-generated method stub

}

@Override
public X n() {
    // TODO Auto-generated method stub
    return null;
}
}

對於具有返回類型接口的方法,我想要返回什么? 我很困惑因為你無法實例化接口所以我想要返回什么?

您將需要編寫一個實現該接口的類並返回該類的對象。

正如你的問題所說: You may define supplementary classes ,所以只需編寫實現這些接口的類。 對於abstract類,您必須擴展它們。

class Foo extends A {
// Override abstract method
}

由於C類已經實現了XY ,因此您只需返回C類( new C() )的對象,其中需要XY

如果創建匿名類,則可以提供對接口的引用。 Runnable run = new Runnable(){}。 界面中的方法將存儲在您的變量中。 這不是一個接口,而是給你的接口中包含的方法提供某種參考。

public Runnable run() {
    return new Runnable() {
        public void run() { }
    };
}

這也適用於抽象類。 通常,您無法直接創建抽象類new A();的實例new A(); ,但匿名類允許您創建排序的子類,允許您覆蓋需要正文的方法。 創建匿名類與在某些方面創建子類類似。 您可以訪問受保護的變量,也可以聲明新方法。

如果您的接口只包含1個方法,則cpuld也使用lambda表達式

Runnable run = () -> {

}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM