匿名对象和内部类的理解

转载: https://blog.csdn.net/chenrushui/article/details/51916038

匿名对象:

匿名对象是对象的简化形式;


匿名对象的使用情况:

1)当对对象方法仅进行一次调用的时候使用;如果需要调用多次,还需要创建对象。如果对一个对象进行多个成员的调用,就必须给这个对象起个名字。

2)匿名对象可以作为实际参数进行传递(点击事件监听里面的参数)

3)匿名对象是没有被其他对象所引用

4使用一次就变成垃圾了,被垃圾回收器收回了。

理解:

创建一个匿名对象,调用类中的方法   new People().say();

这里需要传递一个监听对象,我们直接给一个匿名对象;使用匿名对象,如果直接new接口要实现接口中的抽象方法(相当于 创建了一个子类对象,并实现其中的抽象方法)

[java]  view plain  copy
  1. top_right_left_img.setOnClickListener(new View.OnClickListener() {  
  2.      @Override  
  3.      public void onClick(View v) {  
  4.      }  
  5.  });  
[java]  view plain  copy
  1. top_right_left_img.setOnClickListener(listener);  
  2.  View.OnClickListener listener = new View.OnClickListener() {  
  3.      @Override  
  4.      public void onClick(View v) {  
  5.   
  6.      }  
  7.  };  


 

内部类:

java内部类使用总结:

1)一个类中还包含着另外一个类,内部类有自己的属性和方法。

2)程序编译过后会产生两个.class文件。

3)内部类其实严重破坏了良好的代码结构,但为什么还要使用内部类呢?因为内部类可以随意使用外部类的成员变量(包括私有)而不用生成外部类的对象,这也是内部类的唯一优点。

常规用法:

1)创建内部类对象

2)内部类可以直接使用外部类的成员变量,在android 点击事件跳转页面中有用到,页面之间传递参数

3)如果存在同名变量,访问内部类本身的成员变量可用this.属性名

4)如果存在同名变量,访问外部类的成员变量需要使用Out.this.属性名

5)如果用static 将内部内静态化,那么内部类就只能访问外部类的静态成员变量,具有局限性

在变量前面加private 表示类的私有属性,只可以在类内部访问使用,即只能在本类中进行使用,也不能够在子类中使用,子类只能继承公有的成员变量和成员方法。

内部类中的变量访问形式案例

[java]  view plain  copy
  1. package com.crs.demo.ui.innerclass;  
  2.   
  3. /** 
  4.  * Created on 2016/9/26. 
  5.  * Author:crs 
  6.  * Description:内部类成员变量使用特点 
  7.  */  
  8. public class Demo2 {  
  9.     private int age = 12;  
  10.   
  11.     class Inner {  
  12.         int age = 13;  
  13.   
  14.         void print() {  
  15.             int age = 14;  
  16.             System.out.print(age + "\n");  
  17.   
  18.             //2)如果存在同名变量,访问内部类本身的成员变量可用this.属性名  
  19.             System.out.print(this.age + "\n");  
  20.   
  21.             //3)如果存在同名变量,访问外部类的成员变量需要使用Out.this.属性名  
  22.             System.out.print(Demo2.this.age + "\n");  
  23.         }  
  24.     }  
  25. }  

[java]  view plain  copy
  1. package com.crs.demo.ui.innerclass;  
  2.   
  3. /** 
  4.  * Created on 2016/9/26. 
  5.  * Author:crs 
  6.  * Description:静态内部类的使用以及注意事项 
  7.  */  
  8. public class Demo3 {  
  9.     private int age = 16;  
  10.     private static int score = 16;  
  11.   
  12.     static class Inner {  
  13.         //1)在变量前面加private 表示类的私有属性,只可以在类内部访问使用,即只能在本类中进行使用,也不能够在子类中使用,子类只能继承公有的成员变量和成员方法。  
  14.         //2)一定要区分好匿名对象与内部类的区别。  
  15.         public void print() {  
  16.             //4)如果用static 将内部内静态化,那么内部类就只能访问外部类的静态成员变量,具有局限性.  
  17.             //System.out.print(age);会报错。  
  18.             System.out.print(score);  
  19.         }  
  20.     }  
  21.   
  22. }  

[java]  view plain  copy
  1. package com.crs.demo.ui.innerclass;  
  2.   
  3. /** 
  4.  * Created on 2016/9/26. 
  5.  * Author:crs 
  6.  * Description:测试内部类的使用 
  7.  */  
  8. public class TestInnerClass {  
  9.     public static void main(String[] args) {  
  10.         Demo1 demo1 = new Demo1();  
  11.         //创建内部类对象  
  12.         Demo1.Inner inner = demo1.new Inner();  
  13.         inner.print();  
  14.   
  15.         //主要用于测试内部类的变量访问形式  
  16.         Demo2 demo2 = new Demo2();  
  17.         Demo2.Inner inner1 = demo2.new Inner();  
  18.         inner1.print();  
  19.   
  20.         //测试静态内部类的使用  
  21.         Demo3.Inner inner3= new Demo3.Inner();  
  22.         inner3.print();  
  23.     }  
  24. }  
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值