我获得了一组接口,并且必须创建一个实现这些接口的类,但是,我对引用其他接口的接口的返回类型感到困惑。
//在下面实现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;
}
}
对于具有返回类型接口的方法,我想要返回什么?我很困惑,因为你不能实例化接口,所以我想回来什么?
答案 0 :(得分:1)
您需要编写一个实现该接口的类并返回该类的对象。
正如你的问题所说:You may define supplementary classes
,所以只需编写实现这些接口的类。对于abstract
类,您必须扩展它们。
class Foo extends A {
// Override abstract method
}
由于类C
已经实现了X
和Y
,您只需返回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 = () -> {
}