Java内部类

时间:2010-04-23 11:01:29

标签: java inner-classes

我是Java新手,对内部类有以下问题:

实现内部类时,是否需要声明其属性和方法范围,即public,private,protected?

编辑:由于缺少代理(如在C#中),有人可能会提到如何最好地在Java中实现一个消息传递系统,以实现多个表单之间的通信(Jframe)?

我已经读过我可以使用内部类但是我也被告知我不应该实现内部类的大小超过几行。我应该去哪所学校?

5 个答案:

答案 0 :(得分:3)

如果你愿意。

内部课程大致与任何其他课程一样。 (除非你没有声明它是静态的,否则它将有一个EnclosingClass.this引用。)

答案 1 :(得分:2)

我建议将内部类视为private

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

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

说过内部课程非常有用。使用它们的味道。

答案 2 :(得分:2)

实现内部类时,我是否需要声明其属性和方法范围,即public,private,protected?

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

public class Example1
{
    int a;

    public class Example2
    {
    int b;

    void test () {}
    }
}

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

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

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

嵌套类的类型类型范围内部 静态嵌套类成员号 内部[非静态]类成员是 当地的班级是的 匿名类只是重点                          在哪儿                           定义是

答案 3 :(得分:0)

虽然这不是你的问题的答案,但要确保你知道内部类的“静态”修饰符。

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

与此不同:

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

如果你有一个静态内部类,你可能想要保护变量,受保护的方法等等。但是对于非静态的内部类,通常你想要一切都是私有的。

谷歌的差异。

答案 4 :(得分:0)

内部只能通过封闭的类看到。它主要用于在类中实现实用程序功能。让我们以门和密码为例。

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);
}

}