A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 高光天 中级黑马   /  2015-3-24 08:22  /  1579 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

为什么实用内部类啊  用方法不能实现吗

5 个回复

倒序浏览
有缘人啊。昨天花了半天时间复习了内部类,感觉比初次学习时的内容多好多,好多碎知识点,先将复习笔记写出来。主要是特性总结。共同学习
内部类:
        把一个类放在另一个类的内部定义即可。此处的“类内部”包括类中的任何位置,甚至在方法中也可以定义内部类(方法里定义的内部类被称为局部内部类)。
        内部类作用:
                1.更好的封装,隐藏在外部类之内,不允许同一个包中其他类的访问;
                2.内部类成员可以直接访问外部类的私有数据,但外部类不能访问内部类的实现细节。
                3.匿名内部类适合用于创建那些仅需要一次使用的类。
       
        大部分时候,内部类都被作为成员内部类定义,而不是作为局部内部类。成员内部类是一种与属性、方法、构造器和初始化块相似的类成员;局部内部类和匿名内部类则不是类成员。局部内部类和匿名内部类不是类成员。

        成员内部类分为两种:静态内部类和非静态内部类。使用static修饰的成员内部类是静态内部类,没有‘使用static修饰的成员内部类是非静态内部类。
                非静态内部类:
                非静态内部类里不能有静态方法、静态属性、静态初始化块。
                静态内部类:
                静态内部类可以包含静态成员,也可以包含非静态成员。根据静态成员不能访问非静态成员的规则,所以静态内部类不能访问外部类的实例成员,只能访问外部类的类成员,即只能访问外部类的静态成员。外部类依然不能直接访问静态内部类的成员,但可以使用静态内部类的类名作为调用者来访问静态内部类的类成员,也可使用静态内部类的对象作为调用者来访问静态内部类的实例成员。
外部类和内部类区别:

        外部类的上一级程序单元是包,所以它只有2个作用域:同一个包和任何位置。因此只需两种访问权限:包访问权限和公开访问权限。正好对应省略访问控制符和public访问控制符。而内部类的上一级程序单元是外部类,它就具有四个作用域:同一个类、同一个包、父子类和任何位置,因此可以使用四种访问控制权限。
       
        局部内部类:
            如果把一个内部类放在方法里定义,则这个内部类就是一个局部内部类,局部内部类仅在该方法里有效。
            对于局部成员而言,不管是局部变量,还是局部内部类,它们的上一级程序单元是方法,而不是类,使用static修饰它们没有任何意义。因此,所有局部成员都不能使用static修饰。不仅如此,因为局部成员的作用域是所在方法,其他程序单元永远也不可能访问另一个方法中的局部成员,所以所有局部成员都不能使用访问控制符修饰。
       
        匿名内部类:
                匿名内部类适合创建那种只需要一次使用的类。
                特点:
                不能重复使用:
                不能是抽象类;
                不能定义构造器。
                java8中出现了lambda表达式彻底简化了匿名内部类的繁琐写法,是一个应用趋势。

评分

参与人数 1技术分 +1 收起 理由
万合天宜 + 1 很给力!

查看全部评分

回复 使用道具 举报
Mr.南郭 发表于 2015-3-24 08:55
有缘人啊。昨天花了半天时间复习了内部类,感觉比初次学习时的内容多好多,好多碎知识点,先将复习笔记写出 ...

必须得赞一个啊!
回复 使用道具 举报

额。。。。我的技术分跑你身上了................
回复 使用道具 举报
Mr.南郭 发表于 2015-3-24 08:55
有缘人啊。昨天花了半天时间复习了内部类,感觉比初次学习时的内容多好多,好多碎知识点,先将复习笔记写出 ...

怒赞   话说你的笔记真的记得好详细啊
回复 使用道具 举报
Mr.南郭 发表于 2015-3-24 08:55
有缘人啊。昨天花了半天时间复习了内部类,感觉比初次学习时的内容多好多,好多碎知识点,先将复习笔记写出 ...

这笔记记得!必须赞!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马