黑马程序员技术交流社区

标题: 匿名内部类和内部类的用法是否是相同的? [打印本页]

作者: code_geass    时间: 2013-9-11 12:55
标题: 匿名内部类和内部类的用法是否是相同的?
本帖最后由 杨增坤 于 2013-9-13 08:52 编辑

有什么不同点吗?
作者: 杨伟斌    时间: 2013-9-11 13:02
匿名内部类只能使用一次,不区分static和非static。如果用到外部类的变量的话,必须是类变量或者实例变量,就是必须是类定义的变量,或者final的局部变量。匿名内部类如果是继承某个类的话是可以重写那个类的方法的,这个和普通内部类一样。内部类可以是static的或者非static的,static内部类只能包含静态方法和静态类变量,只能访问外部类的静态元素,内部类可以实例化,多次使用。
作者: 周文斌    时间: 2013-9-11 13:08
用法原本是没啥区别,匿名内部类就是内部类的简化。
但是简化必然有优点和不足(毕老爷原话。。):
优点简单来说就是不用定义类,直接new就行。
接着就是缺点了:
匿名内部类由于没有定义类,缺少了该类的引用,这导致两个问题:
1.无法创建对象,new啥不知道。。于是匿名内部类强制要求继承一个类,或者实现一个接口,用父类名或接口名做引用。(非匿名内部类没有这强制要求)
    在这过程中还导致了新的问题,继承虚类或接口后,必须覆盖虚方法,需要覆盖的方法过多或导致代码      可读性下降。这种情况不推荐使用匿名内部类。
2.无法二次创建对象,即创建一次咱们就得写一遍匿名内部类。



作者: 蓝骑    时间: 2013-9-11 13:11
匿名内部类只能在本类中使用,且无法实例化,因为没有名字嘛!无法实例化就是说只能用一次,但好处是即写即用,代码简洁性和可读性更好,至于其他不同点,应该就没了,使用起来效果差不多!!
作者: 周文斌    时间: 2013-9-11 13:14
如果用到外部类的变量的话,必须是类变量或者实例变量,就是必须是类定义的变量,或者final的局部变量。


内部类使用外部类的变量,无需实例变量。。可以直接Outer.this.XXX,内部类无论是成员位还是局部位都拥有外部类的引用呀。。不过最后一句,局部位的内部类要使用剧本变量确实只能使用final修饰的局部变量。。


作者: 单曲循环    时间: 2013-9-11 13:31
内部类是处于另外一个类中的具有类型名称定义块代码。
匿名类是已知父类或者接口标准的内部类,且不具有具体的类型名称的块代码。匿名类的实例创建必须使用new 父类名|接口名 ()来创建。)
匿名内部类——用于临时创建实例,且该实例不希望类的使用者关注
匿名内部类的存在前提有两种:1、已知该类型的父类 或者 2、已知该类型的接口标准
作者: 杨增坤    时间: 2013-9-11 17:23
参考这里




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