转载: https://blog.csdn.net/chenrushui/article/details/51916038
匿名对象:
匿名对象是对象的简化形式;
匿名对象的使用情况:
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();
- }
- }