黑马程序员技术交流社区

标题: 内部类和匿名内部类的困惑 [打印本页]

作者: 神奇小魔王    时间: 2014-4-2 23:06
标题: 内部类和匿名内部类的困惑
最近学习内部类和匿名内部类感觉很困惑,不知道该如何去理解,如何去使用,在实际项目中会在什么情况下使用到呢?学哥学姐们,请帮助下,谢谢!
作者: 阳春烟景    时间: 2014-4-2 23:17
内部类有如下特征:
内部类被编译成名为OuterClassName$InnerClassName.class的类。
内部类可以引用定义在它嵌套的外部类中的数据和方法,所以不需要将外部类对象的引用传递给内部类的构造方法,因此,内部类可以拿程序简单和简洁。
声明用可见性修饰符声明内部类,遵从应用于一般类成员的可见性规则。
可以将内部类声明为static。一个static内部类可以使用外部类的名字访问。一个static类是不能访问外部类的非静态成员的。
内部类的对象经常在外部类中创建。但是也可以从另一个类中创建一个内部类的对象。如果该内部是非静态的,就必须先创建一个外部类的实例,然后用下面的语法创建一个内部类的对象:
Java代码
OuterClass.InnerClass innerObject = OutObject.new Innerclass()  
.如果内部类是静态的,那么使用下面的语法为它创建一个对象:
Java代码
OuterClass.InnerClass innerObject = new OutObject.Innerclass()   
匿名内部类是一种特殊的内部类,所以有很多方面都应把它当作内部类对待。除此之外,它还不以下特征。
匿名内部类必须是扩展父类或实现接口的。但是它不能有明确的extends或implements语句。
匿名内部类必须实现父类或接口中所有的抽象方法。
匿名内部类总是使用父类的无参数构造方法来创建实例。如果匿名内部类实现了接口,构造方法就是Object().
匿名内部类编译为名为OuterClassName$n.class的类。如,如果外部类Test有两个匿名类,那么它们就编译成Test$1.class和Test$2.class。
作者: 向阳泪无痕    时间: 2014-4-3 08:32
匿名内部类 是内部类的一种简写形式 ,没有类名而已,一般用在,你所要使用的类只在这里出现一次,或你要马上使用一个类,就可以直接,使用匿名类。
作者: 1453149997    时间: 2014-4-3 09:05
本帖最后由 1453149997 于 2014-4-3 09:06 编辑

(1)内部类是一个类,如果它处于成员的位置,我们可以把它理解成一个类的成员,就像成员方法一样,
我们可以叫他“成员类”(这个概念是我自己造的);使用你可以借助如何使用成员方法来理解如何使用
内部类;内部类也可以位于方法内部,具体细节就不在介绍了,毕竟这个概念太复杂;
      当需要把类的内部的某个东西定义为一个类的时候就使用内部类,比如在Collection体系的集合中,所
有的集合都有一个迭代器,这个迭代器就是一个内部类;

(2)匿名内部类就是位于类的内部,但是只被使用一次,不需要定义一个变量指向它的类;
     

作者: 神奇小魔王    时间: 2014-4-3 12:17
感觉帖子说的不错,希望有机会和你一起学习
作者: 黄泉    时间: 2014-4-3 15:26
给你个文档,自己研究吧!不懂的再问我吧!

作者: 黄泉    时间: 2014-4-3 15:29
file:///C:\Users\���\AppData\Local\Temp\SGTpbq\5808\01973931.gif⊙﹏⊙b汗!doc文件不让传,给你压缩了!

Java 内部类.zip

6.8 KB, 下载次数: 57






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