1

当我尝试在 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);
            }
        };
    }
}
4

3 回答 3

1

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

谷歌了解更多。

于 2013-05-06T04:45:24.900 回答
0

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

这个特殊的位是使您的班级匿名的原因:

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

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

InnerClass myInnerClass = new InnerClass();

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

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

在某处,指定AnotherInnerClass扩展InnerClass并覆盖该函数:

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

然后像这样实例化它:

AnotherInnerClass myInnerClass = new AnotherInnerClass();
于 2013-05-06T05:31:17.090 回答
0

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

于 2013-05-06T05:15:46.730 回答