您的位置:首页 > 其它

匿名对象和内部类

2016-07-15 11:21 1091 查看
匿名对象:

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

匿名对象的使用情况:

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();
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  匿名对象 内部类