【问题标题】:Are nested classes and member classes the same thing?嵌套类和成员类是一回事吗?
【发布时间】:2015-07-18 16:05:26
【问题描述】:

Java 术语嵌套类成员类可以互换使用吗?

来自 JLS:

嵌套类是其声明出现在另一个类或接口的主体中的任何类。

[…]

成员类是其声明直接包含在另一个类或接口声明的主体中的类

我认为成员类一词可能不包括匿名类本地类,但这只是我的猜测。

【问题讨论】:

  • 我认为你可能是对的。不是在主类中定义为顶层的类,而是在方法中定义为匿名类的类将是嵌套类,而不是成员类(我认为)。

标签: java class jls


【解决方案1】:

这是来自Chapter 8. Classes的一个很好的报价:

成员类声明描述了作为周围类成员的嵌套类。成员类可能是static,在这种情况下他们无权访问周围类的实例变量;或者它们可能是内部类。

作为奖励引用,local classes 绝对不是会员课程:

本地类是一个嵌套类,它不是任何类的成员 [...]。


class Foo {
    // a member class
    class InstanceMember {}
    // a member class
    static class StaticMember {}

    Foo() {
        // not a member class
        class LocalAndNotMember {}
        // not a member class
        Object anonymousAndNotMember = new Object() {};
    }
}

【讨论】:

    【解决方案2】:

    嵌套类可以包括静态或非静态类,其中成员类是后者。所以成员类是嵌套类的子集。

    【讨论】:

    • 我认为您不正确,先生,并且将成员类与内部类混淆了。由于类中的接口是隐式静态的,但仍称为成员接口(在 JLS 中),我发现另一个类中的静态类也不太可能不是成员类。此外,静态字段和静态方法也是成员。
    • 我认为您的陈述“成员类是嵌套类的子集”可能是正确的,尽管出于问题中提到的原因。
    猜你喜欢
    • 2023-03-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-22
    • 1970-01-01
    • 1970-01-01
    • 2017-01-25
    • 2013-11-14
    相关资源
    最近更新 更多