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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 杨增坤 于 2013-9-13 08:52 编辑

有什么不同点吗?

6 个回复

倒序浏览
匿名内部类只能使用一次,不区分static和非static。如果用到外部类的变量的话,必须是类变量或者实例变量,就是必须是类定义的变量,或者final的局部变量。匿名内部类如果是继承某个类的话是可以重写那个类的方法的,这个和普通内部类一样。内部类可以是static的或者非static的,static内部类只能包含静态方法和静态类变量,只能访问外部类的静态元素,内部类可以实例化,多次使用。

评分

参与人数 1技术分 +1 收起 理由
EYE_SEE_YOU + 1

查看全部评分

回复 使用道具 举报
用法原本是没啥区别,匿名内部类就是内部类的简化。
但是简化必然有优点和不足(毕老爷原话。。):
优点简单来说就是不用定义类,直接new就行。
接着就是缺点了:
匿名内部类由于没有定义类,缺少了该类的引用,这导致两个问题:
1.无法创建对象,new啥不知道。。于是匿名内部类强制要求继承一个类,或者实现一个接口,用父类名或接口名做引用。(非匿名内部类没有这强制要求)
    在这过程中还导致了新的问题,继承虚类或接口后,必须覆盖虚方法,需要覆盖的方法过多或导致代码      可读性下降。这种情况不推荐使用匿名内部类。
2.无法二次创建对象,即创建一次咱们就得写一遍匿名内部类。


评分

参与人数 1技术分 +1 收起 理由
EYE_SEE_YOU + 1

查看全部评分

回复 使用道具 举报
匿名内部类只能在本类中使用,且无法实例化,因为没有名字嘛!无法实例化就是说只能用一次,但好处是即写即用,代码简洁性和可读性更好,至于其他不同点,应该就没了,使用起来效果差不多!!
回复 使用道具 举报
如果用到外部类的变量的话,必须是类变量或者实例变量,就是必须是类定义的变量,或者final的局部变量。


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

回复 使用道具 举报
内部类是处于另外一个类中的具有类型名称定义块代码。
匿名类是已知父类或者接口标准的内部类,且不具有具体的类型名称的块代码。匿名类的实例创建必须使用new 父类名|接口名 ()来创建。)
匿名内部类——用于临时创建实例,且该实例不希望类的使用者关注
匿名内部类的存在前提有两种:1、已知该类型的父类 或者 2、已知该类型的接口标准

评分

参与人数 1技术分 +1 收起 理由
杨增坤 + 1

查看全部评分

回复 使用道具 举报
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马