内部类与匿名内部类的区别

内部类有如下特征:

  1. 内部类被编译成名为OuterClassName$InnerClassName.class的类。
  2. 内部类可以引用定义在它嵌套的外部类中的数据和方法,所以不需要将外部类对象的引用传递给内部类的构造方法,因此,内部类可以拿程序简单和简洁。
  3. 声明用可见性修饰符声明内部类,遵从应用于一般类成员的可见性规则。
  4. 可以将内部类声明为static。一个static内部类可以使用外部类的名字访问。一个static类是不能访问外部类的非静态成员的。
  5. 内部类的对象经常在外部类中创建。但是也可以从另一个类中创建一个内部类的对象。如果该内部是非静态的,就必须先创建一个外部类的实例,然后用下面的语法创建一个内部类的对象:
    Java代码
    1. OuterClass.InnerClass innerObject = OutObject.new Innerclass()  
     .如果内部类是静态的,那么使用下面的语法为它创建一个对象:
    Java代码
    1. OuterClass.InnerClass innerObject = new OutObject.Innerclass()   

匿名内部类是一种特殊的内部类,所以有很多方面都应把它当作内部类对待。除此之外,它还不以下特征。

  1. 匿名内部类必须是扩展父类或实现接口的。但是它不能有明确的extends或implements语句。
  2. 匿名内部类必须实现父类或接口中所有的抽象方法。
  3. 匿名内部类总是使用父类的无参数构造方法来创建实例。如果匿名内部类实现了接口,构造方法就是Object().
  4. 匿名内部类编译为名为OuterClassName$n.class的类。如,如果外部类Test有两个匿名类,那么它们就编译成Test$1.class和Test$2.class。

总结: 在Activity内部定义的一个AsyncTask,它属于一个内部类,该类本身和外面的Activity是有引用关系的,如果Activity要销毁的时候,AsyncTask还仍然在运行,这会导致Activity没有办法完全释放,从而引发内存泄漏。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值