Java 接口作为参考变量

Java 接口作为参考变量,java,class,interface,Java,Class,Interface,假设我有返回类型为Object和interface typeabc的方法 interface abc { ... } 我不想实现接口abc。 参考变量c的类型是abc,但c的对象类型是什么? 我们无法创建接口的对象,那么它可能是什么呢 例如: sup s=新的子节点();//其中sub是sup的子类。这里sup是返回类型,sub是对象类型。为了回答您的问题,您必须首先考虑编写meth2()的可能方法。您必须在某个地方实现ABC接口。您可以这样做: class xyz {

假设我有返回类型为Object和interface type
abc
的方法

interface abc
{
   ...
}
我不想实现接口abc。 参考变量c的类型是abc,但c的对象类型是什么? 我们无法创建接口的对象,那么它可能是什么呢

例如:
sup s=新的子节点();//其中sub是sup的子类。这里sup是返回类型,sub是对象类型。

为了回答您的问题,您必须首先考虑编写
meth2()
的可能方法。您必须在某个地方实现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() ;
    }
}

方法
meth2
只能返回
null
或实现接口
abc
的类的实例
c
的底层类型可以是实现
abc
的任何对象。实际类型取决于
meth2
的实现

interface abc
{
   ...
}
“但在我的代码中,没有实现abc”你说。如果没有实现abc,
meth2
无法实现。它永远无法返回正确的值,因为如果没有类型实现
abc
,它无法创建与
abc
兼容的类型

interface abc
{
   ...
}
但是,在
meth2
中,您可以创建所谓的“匿名类”:


在编译过程中,这个匿名类将变成封闭类的一个内部类,该类实现了
abc
,它将有一个完全限定的名称,比如
yourpackage.EnclosingClass$1

除非返回
null
,否则您计划如何在不创建
abc
对象的情况下实现方法
meth2
?在后一种情况下,
c
的值将为
null
。请遵守Java命名约定(如类型为
Abc
),并标识代码如果您想要类型为
Abc
的对象,则必须定义一个实现它的类(尽管它可能是匿名类)。我不清楚您如何认为不实现接口就可以做任何有用的事情。我在理解getAnnotations()方法时遇到了类似的问题,该方法的返回类型为Annotation[],Annotation是一个接口。某个地方有一个类实现了
Annotation
(可能不止一个这样的类)。它可能是埋在Java运行时库中某个地方的私有类。