繁体   English   中英

Java 内部类

[英]Java Inner Classes

我是 Java 新手,有以下关于内部类的问题:

实现内部类时,是否需要声明其属性和方法范围,即公共、私有、受保护?

编辑:在没有委托的情况下(如在 C# 中),有人可以提到如何最好地在 Java 中实现消息传递系统以实现多个表单(Jframe)之间的通信?

我已经读到我可以为此使用内部类,但我也被告知我不应该实现超过几行的内部类。 我应该去哪个学校?

如果你想。

内部类与任何其他类大致相同。 (除非您不将其声明为静态,否则它将有一个 EnclosureClass.this 引用。)

我建议将内部类视为private

在 Java 中,外部类及其所有嵌套(包括内部)类可以相互摆弄private s。 (使用额外的合成访问方法生成的字节码可能毫无意义地冗长,但这不太可能重要。)

从接口的角度来看,具有奇怪内部类类型的类有点奇怪。 如果你喜欢那种东西,就更难测试了。 嵌套类型经常被创建,因为在坏的 IDE 中创建一个新文件有点痛苦 - 不要被讨厌的快捷方式所诱惑。

话虽如此,内部类非常有用。 有品味地使用它们。

在实现内部类时,我是否需要声明其属性和方法范围,即公共、私有、受保护?

这完全取决于您希望内部类的行为方式。 默认情况下,内部类是非静态的:

public class Example1
{
    int a;

    public class Example2
    {
    int b;

    void test () {}
    }
}

非静态内部类只能在外部类的非静态方法中实例化。 这是因为非静态内部类的每个实例都必须与外部类的实例相关联。 从某种意义上说,非静态内部类的每个实例都存在于外部类的实例“内部”。 外部类的单个实例可能与内部类的多个实例相关联。

由于非静态内部类的实例具有关联的外部类实例,因此内部类的方法可以直接访问外部类实例的任何成员(字段或方法)。 比如上面定义的测试方法可以直接访问a和b

在另一个类中定义的类称为嵌套类。 与类的其他成员一样,嵌套类可以声明为静态,也可以不声明。 非静态嵌套类称为内部类。 内部类的实例只能存在于其封闭类的实例中,并且可以访问其封闭类的成员,即使它们被声明为私有。 下表显示了嵌套类的类型:

嵌套类的类型 类型 范围 内部静态嵌套类成员 否 内部 [非静态] 类成员 是 本地类 本地 是 匿名类 仅定义它的点 是

虽然这不是您的问题的答案,但请确保您了解内部类的“静态”修饰符。

public class Stuff {
public static class SubStuff {
    //private or protected
}
}

与此不同:

public class Stuff {
public class SubStuff {
    //only private
}
}

如果您有一个静态内部类,那么您可能需要受保护的变量、受保护的方法等等。 但是对于非静态的内部类,通常您希望所有内容都是私有的。

谷歌的差异。

只有封闭的类才能看到内部。 它主要用于实现类内的实用功能。 让我们以门和密码为例。

public class Door {

public boolean isPassword(String key) {
    
    //local inner class - its hidden from the world
    class Password{
        public boolean isPassword(String key) {
            if(!key.equals("xyz")) {
                System.out.println("Not Password. Door is locked");
                return false;
            }else {
                System.out.println("Password corect. Door is opened");
            return true;
            }
        }
    }
    return new Password().isPassword(key);
}

}

暂无
暂无

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

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