匿名对象和内部类
2016-07-15 11:21
1171 查看
匿名对象:
匿名对象是对象的简化形式;
匿名对象的使用情况:
1)当对对象方法仅进行一次调用的时候使用;如果需要调用多次,还需要创建对象。如果对一个对象进行多个成员的调用,就必须给这个对象起个名字。
2)匿名对象可以作为实际参数进行传递;(点击事件监听里面的参数)
3)匿名对象是没有被其他对象所引用;
4)使用一次就变成垃圾了,被垃圾回收器收回了。
理解:
创建一个匿名对象,调用类中的方法 new People().say();
这里需要传递一个监听对象,我们直接给一个匿名对象;使用匿名对象,如果直接new接口要实现接口中的抽象方法(相当于 创建了一个子类对象,并实现其中的抽象方法);
内部类:
java内部类使用总结:
1)一个类中还包含着另外一个类,内部类有自己的属性和方法。
2)程序编译过后会产生两个.class文件。
3)内部类其实严重破坏了良好的代码结构,但为什么还要使用内部类呢?因为内部类可以随意使用外部类的成员变量(包括私有)而不用生成外部类的对象,这也是内部类的唯一优点。
常规用法:
1)创建内部类对象
2)内部类可以直接使用外部类的成员变量,在android 点击事件跳转页面中有用到,页面之间传递参数
3)如果存在同名变量,访问内部类本身的成员变量可用this.属性名
4)如果存在同名变量,访问外部类的成员变量需要使用Out.this.属性名
5)如果用static 将内部内静态化,那么内部类就只能访问外部类的静态成员变量,具有局限性
在变量前面加private 表示类的私有属性,只可以在类内部访问使用,即只能在本类中进行使用,也不能够在子类中使用,子类只能继承公有的成员变量和成员方法。
内部类中的变量访问形式案例
匿名对象是对象的简化形式;
匿名对象的使用情况:
1)当对对象方法仅进行一次调用的时候使用;如果需要调用多次,还需要创建对象。如果对一个对象进行多个成员的调用,就必须给这个对象起个名字。
2)匿名对象可以作为实际参数进行传递;(点击事件监听里面的参数)
3)匿名对象是没有被其他对象所引用;
4)使用一次就变成垃圾了,被垃圾回收器收回了。
理解:
创建一个匿名对象,调用类中的方法 new People().say();
这里需要传递一个监听对象,我们直接给一个匿名对象;使用匿名对象,如果直接new接口要实现接口中的抽象方法(相当于 创建了一个子类对象,并实现其中的抽象方法);
top_right_left_img.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { } });
top_right_left_img.setOnClickListener(listener); View.OnClickListener listener = new View.OnClickListener() { @Override public void onClick(View v) { } };
内部类:
java内部类使用总结:
1)一个类中还包含着另外一个类,内部类有自己的属性和方法。
2)程序编译过后会产生两个.class文件。
3)内部类其实严重破坏了良好的代码结构,但为什么还要使用内部类呢?因为内部类可以随意使用外部类的成员变量(包括私有)而不用生成外部类的对象,这也是内部类的唯一优点。
常规用法:
1)创建内部类对象
2)内部类可以直接使用外部类的成员变量,在android 点击事件跳转页面中有用到,页面之间传递参数
3)如果存在同名变量,访问内部类本身的成员变量可用this.属性名
4)如果存在同名变量,访问外部类的成员变量需要使用Out.this.属性名
5)如果用static 将内部内静态化,那么内部类就只能访问外部类的静态成员变量,具有局限性
在变量前面加private 表示类的私有属性,只可以在类内部访问使用,即只能在本类中进行使用,也不能够在子类中使用,子类只能继承公有的成员变量和成员方法。
内部类中的变量访问形式案例
package com.crs.demo.ui.innerclass; /** * Created on 2016/9/26. * Author:crs * Description:内部类成员变量使用特点 */ public class Demo2 { private int age = 12; class Inner { int age = 13; void print() { int age = 14; System.out.print(age + "\n"); //2)如果存在同名变量,访问内部类本身的成员变量可用this.属性名 System.out.print(this.age + "\n"); //3)如果存在同名变量,访问外部类的成员变量需要使用Out.this.属性名 System.out.print(Demo2.this.age + "\n"); } } }
package com.crs.demo.ui.innerclass; /** * Created on 2016/9/26. * Author:crs * Description:静态内部类的使用以及注意事项 */ public class Demo3 { private int age = 16; private static int score = 16; static class Inner { //1)在变量前面加private 表示类的私有属性,只可以在类内部访问使用,即只能在本类中进行使用,也不能够在子类中使用,子类只能继承公有的成员变量和成员方法。 //2)一定要区分好匿名对象与内部类的区别。 public void print() { //4)如果用static 将内部内静态化,那么内部类就只能访问外部类的静态成员变量,具有局限性. //System.out.print(age);会报错。 System.out.print(score); } } }
package com.crs.demo.ui.innerclass; /** * Created on 2016/9/26. * Author:crs * Description:测试内部类的使用 */ public class TestInnerClass { public static void main(String[] args) { Demo1 demo1 = new Demo1(); //创建内部类对象 Demo1.Inner inner = demo1.new Inner(); inner.print(); //主要用于测试内部类的变量访问形式 Demo2 demo2 = new Demo2(); Demo2.Inner inner1 = demo2.new Inner(); inner1.print(); //测试静态内部类的使用 Demo3.Inner inner3= new Demo3.Inner(); inner3.print(); } }
相关文章推荐
- android中写一个内部类来选择文件夹中指定的图片类型实例说明
- 基于java内部类作用的深入分析
- 深入解析Java中的内部类
- 对Java的面对对象编程中对象和引用以及内部类的理解
- java中的内部类详细总结
- 全面解读Java编程中的内部类
- Java中的匿名内部类小结
- Java嵌套类和内部类详解
- Java内部类的继承(全)
- 关于Scala的路徑依赖类型(Path-dependent type)
- java语言匿名内部类之回调
- java中的内部类总结
- Java内部类的总结
- 关于JAVA内部类的相关知识
- Java 中的成员内部类(转载)
- java 内部类作用分析
- 回看基础--Java内部类详解
- Java嵌套类
- 内部类(Inner Class)
- java内部类定义