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

时间:2014-05-02 22:24:42

标签: java generics inheritance 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;
}
}

对于具有返回类型接口的方法,我想要返回什么?我很困惑,因为你不能实例化接口,所以我想回来什么?

2 个答案:

答案 0 :(得分:1)

您需要编写一个实现该接口的类并返回该类的对象。

正如你的问题所说:You may define supplementary classes,所以只需编写实现这些接口的类。对于abstract类,您必须扩展它们。

class Foo extends A {
// Override abstract method
}

由于类C已经实现了XY,您只需返回C类(new C())的对象,其中X或{ {1}}是必需的。

答案 1 :(得分:1)

如果创建匿名类,则可以提供对接口的引用。 Runnable run = new Runnable(){}。界面中的方法将存储在您的变量中。这不是一个界面,而是给你的界面中包含的方法提供某种参考。

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

这也适用于抽象类。通常,您无法直接创建抽象类new A();的实例,但匿名类允许您创建排序的子类,允许您覆盖需要正文的方法。创建匿名类与在某些方面创建子类类似。您可以访问受保护的变量,也可以声明新的方法。

如果您的界面只包含1个方法,则cpuld也会使用lambda表达式

Runnable run = () -> {

}