黑马程序员技术交流社区

标题: 关于内部类知识的小总结 [打印本页]

作者: 鲁行    时间: 2014-10-6 00:11
标题: 关于内部类知识的小总结
内部类:       
        成员内部类:可以访问外部类的所有成员(包括被static和private修饰的成员)
                外部类要访问内部的成员,要创建内部类对象。
                非静态的内部类中不能创建静态的成员

                创建成员内部类对象的格式:
                        外部类名.内部类名 对象名 = new 外部类名.new 内部类名();
                       
                思维拓展:如果想访问父类中被private修饰的成员,除了让父类自己调用外,
                还可以在父类中的创建成员内部类通过这个内部类来访问。

                静态内部类:被static修饰的成员内部类,就被称为静态内部类。
                静态内部类只能访问外部类的静态成员。
                而静态内部类的所有成员都可以被所在的外部类访问。

                创建静态内部类对象的格式:
                        外部类名.内部类名 对象名 = new        外部类名.内部类名();

                记忆法:创建对象,就是调用构造函数的过程。由于成员内部类不是静态的所以不能用外部类名
                                直接调用,而静态内部类可以用外部类名直接调用。
                       
        局部内部类(方法内部类):
                方法中定义的类。
               
        注意:
                局部内部类访问局部变量,该变量必须被final修饰。
                (面试题:
                因为局部变量在栈内存中随着方法的调用结束而消失,而局部内部类存在于堆内存中
                如果该内部类中还有地方使用着局部变量,那么该变量就必须还存在,所以必须用final修饰)

        如果父类或者父接口出现的地方,完全可以用子类对象替代。

       


        匿名内部类的使用:(没有名字的局部内部类)

        前提:
                必须存在一个类,抽象类或者接口。

        格式:
                new 类名或者接口名()
                {
                        重写类或者接口中的方法。
                        也可以自己定义新的方法。
                };

        理解:是一个继承了类或者实现了接口的匿名的子类对象。
               

        什么时候使用匿名内部类呢?
               
                一般来说,当接口或者抽象类中的方法在3个以下的时候,考虑使用匿名内部类。
                在看到有一个方法接收的形式参数是一个抽象类或者接口的时候,
                就可以考虑采用匿名内部类实现。
作者: suoxidong    时间: 2014-10-6 07:01
我也学到这里了 共勉啊
作者: 张业婷    时间: 2014-10-6 09:03
赞一个,一起学!
作者: kid1943    时间: 2014-10-6 10:19
多谢楼主分享




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2