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 :(得分: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
答案 1 :(得分:0)
为了回答您的问题,您必须首先考虑编写meth2()
的可能方法。您必须在某处实现ABC接口。你可以这样做:
ABC meth2() {
return new ABC(){
// Implement the methods that are defined in ABC interface
};
}
答案 2 :(得分:0)
方法meth2
只能返回null
或实现接口abc
的类的实例。