匿名对象和内部类的理解

转载 2018年04月15日 12:12:28

转载: 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. }  

匿名对象和内部类

匿名对象: 匿名对象是对象的简化形式; 匿名对象的使用情况: 1)当对对象方法仅进行一次调用的时候使用;如果需要调用多次,还需要创建对象。如果对一个对象进行多个成员的调用,就必须给这个对象起个名...
  • chenrushui
  • chenrushui
  • 2016-07-15 11:21:19
  • 1598

java语言基础(49)——匿名内部类的本质理解

1 匿名内部类就是内部类的简化写法 2 前提,存在一个类或接口 3 格式: new 类名或接口名(){                   重写方法......                } 上代...
  • wang740209668
  • wang740209668
  • 2017-05-13 23:29:08
  • 498

Java基础---面向对象(继承、多态、抽象类、接口、内部类)

-----------android培训、java培训、java学习型技术博客、期待与您交流!------------ 黑马程序员——Java基础---面向对象(继承、多态、抽象类、接口、内部...
  • ding630345720
  • ding630345720
  • 2015-06-20 19:08:30
  • 376

在什么条件下,也就是什么时候会用java匿名内部类

何时才能使用匿名内部类呢?满足下列条件: ·只用到类的一个实例 。 ·类在定义后马上用到。 ·类非常小(SUN推荐是在4行代码以下) ·给类命名并不会导致你的代码更容易被理解。 在使用匿名...
  • crslee
  • crslee
  • 2015-03-15 09:41:32
  • 375

(2.1.5)内部类和匿名内部类

内部类 内部类是指在一个外部类的内部再定义一个类。类名不需要和文件夹相同。 *内部类可以是静态static的,也可用public,default,protected和private修饰。(而外部...
  • fei20121106
  • fei20121106
  • 2015-03-23 13:32:30
  • 586

Kotlin object express 匿名内部类

Android 中建立一个handler 内部类处理多线程 var handler = object: Handler() { override fun handleMes...
  • Airoyee
  • Airoyee
  • 2015-10-15 09:49:28
  • 4487

JavaScript面向对象---匿名函数和匿名类,以及原生类

1.关于匿名类     var  class1={p1:value1,p2:value2};    这个也可以写成    var class1={};     class1.p1=value1;   ...
  • benbon
  • benbon
  • 2007-11-07 15:30:00
  • 4360

Java内部类的自我理解

本文是借鉴网上的多篇资料,感谢网上各位大牛的分享。一、什么是内部类 内部类是指在一个外部类的内部再定义一个类。内部类作为外部类的成员,并且依附于外部类而存在的。内部类可以为静态,可用protected...
  • junshuaizhang
  • junshuaizhang
  • 2014-07-07 16:17:01
  • 1361

C++匿名对象解析

我们知道在C++的创建对象是一个费时,费空间的一个操作。有些固然是必不可少,但还有一些对象却在我们不知道的情况下被创建了。通常以下三种情况会产生临时对象:   1,以值的方式给函数传参;   2,...
  • u011391093
  • u011391093
  • 2015-03-28 00:44:09
  • 1610

匿名对象 & 内部类

1 匿名对象 匿名对象,没有引用变量,只能使用一次; 匿名对象可以当做参数传递; 匿名对象可以当作方法的返回值; 2 内部类的位置 可以写在其他类的成员位置和局部位置; 3 何时使...
  • u012292754
  • u012292754
  • 2018-03-23 15:01:55
  • 5
收藏助手
不良信息举报
您举报文章:匿名对象和内部类的理解
举报原因:
原因补充:

(最多只允许输入30个字)