2017-06-26 44 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一个类的实例。