繁体   English   中英

什么是匿名内部类?

[英]What is an anonymous inner 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);
            }
        };
    }
}

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

谷歌更多。

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

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

这是使您的班级匿名的原因:

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

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

InnerClass myInnerClass = new InnerClass();

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

如果您不希望使用匿名类,请执行以下操作:

在某个地方,指定AnotherInnerClass来扩展InnerClass ,并覆盖该函数:

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

然后实例化它:

AnotherInnerClass myInnerClass = new AnotherInnerClass();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM