什么是匿名内部课程?

时间:2013-05-06 04:39:09

标签: java nested-class anonymous-class

当我尝试在Java中的abstract class上做一些示例时,我偶然得到了一些像Eclipse中的匿名内部类。

我已粘贴下面的代码。我不明白abstract class与匿名类的关系。

package com.Demo;

abstract class OuterClass {
    abstract void OuterClassMethod();
}

public abstract class InnerClass extends OuterClass {
    public static void main(String[] args) {
        InnerClass myInnerClass = new InnerClass() {
            @Override
            void OuterClassMethod() {
                int OuterClassVariable = 10;
                System.out.println("OuterClassVariable" + " " + OuterClassVariable);
            }
        };
    }
}

3 个答案:

答案 0 :(得分:1)

匿名类是类的“内联”具体实现,通常(但不一定)是抽象类或接口。它在技术上是扩展/实现的超类的子类。

Google了解更多信息。

答案 1 :(得分:0)

在您的示例中,您的类(InnerClass)扩展了类(OuterClass)并实现了它们的抽象方法,这是扩展抽象类的典型行为。以同样的方式,如果您的类实现任何接口,您必须覆盖其抽象方法。这是实现Anonymous内部类的方法。

答案 2 :(得分:0)

基本上,匿名类是一个没有名称的实现 - 因此是“匿名”位。

这一点让你的班级匿名:

    InnerClass myInnerClass = new InnerClass() {
        @Override
        void OuterClassMethod() {
            int OuterClassVariable = 10;
            System.out.println("OuterClassVariable" + " " + OuterClassVariable);
        }
    };

在普通的类实例中,您只需使用:

InnerClass myInnerClass = new InnerClass();

但在这种情况下,您通过覆盖其中的函数(OuterClassMethod())来指定该类的新实现。在InnerClass的其他实例中,OuterClassMethod()仍将具有其原始实现,因为您只调整了此InnerClass的特定实例,并且未将此新实现存储在新类中。

如果您不想要匿名课程,请改为:

某处,指定AnotherInnerClass以扩展InnerClass,并覆盖该功能:

class AnotherInnerClass extends InnerClass {
    @Override
    void OuterClassMethod() {
        int OuterClassVariable = 10;
        System.out.println("OuterClassVariable" + " " + OuterClassVariable);
    }
};

然后将其实例化为:

AnotherInnerClass myInnerClass = new AnotherInnerClass();