[英]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.