内部类的使用

内部类的访问规则:

        1、内部类可以直接访问它所在外部类中的成员,包括私有成员。内部类之所以能直接访问外部类中的成员,就是因为内部类持有一个外部类的引用,格式:外部类.this

        class Outer

        {

                private int x=1;

                class Inner

                {

                        int x=3;

                        void show()

                        {

                                System.out.println("Inner:"+Outer.this.x);

                        }

                }

        }

        2、外部类要访问内部类,必须建立内部类的对象。

访问格式:

        1、当内部类定义在外部类的成员位置上,而且非私有,可以在外部其他来中直接建立内部类对象。格式:外部类名.内部类名 变量名=new 外部类名().内部类名()。比如Outer.Inner in=new Outer().Inner();

        2、当内部类在成员位置上时,就可以被成员修饰符所修饰。比如,private:将内部类在外部类中进行封装

                                                                                                                              static:用static修饰时,内部类就具备了static的特性,而且此时内部类只能直接访问外部类中的static成员,出现了访问的局限性。

        在外部类中如何访问static内部类的非静态成员呢?new Outer.Inner().show()

        在外部其他类中,如何直接访问static内部类中的静态成员呢?Outer.Inner.show()

注意:当内部类中定义了静态成员时,该内部类必须是static的。

            当外部类中的静态方法访问内部类时,内部类也必须是static的。

说这么多,很多人会疑惑什么时候定义内部类?我们都知道类就是对事物的描述,而内部类显而言之就是事物的内部还有事物,这时就用内部类描述。

当内部类定义在局部时:

        1、不可以被成员修饰符修饰

        2、可以直接访问外部类中的成员,因为还持有外部类的引用,但是不可以访问它所在的局部中的变量,只能访问被final修饰的局部变量。

匿名内部类:

        1、匿名内部类其实就是内部类的简写格式。

        2、定义匿名内部类的前提:

              内部类必须是继承一个类或者实现一个接口

        3、匿名内部类对象的格式:new 父类或者接口(){定义子类的内容}.子类方法

        4、匿名内部类中定义的方法最好少于三个,因为定义匿名内部类的时候需要继承父类或者实现接口,如果方法太多,就达不到简化代码的效果,还不如带有名字的的内部类。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章