miracle just wanna be better

匿名内部类的思考

2019-07-10
miracle

匿名内部类

Android里经常用的时间监听代码就是用匿名内部类
一般都会这样写

sign.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    Intent intent1 = new Intent(Main2Activity.this, ZhuActivity.class);
                    startActivity(intent1);
                }
            });

下面的代码就是上面用到的匿名内部类,其实也是正常的一个类,里面有属性和方法,只不过下面的类没有类名,下面的类是View.OnClickListener的子类,重写了View.OnClickListener里的方法
好处就是不用再写一个类继承自View.OnclickListener,重写里面的方法,然后再把这个类放进上面的参数里了

new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    Intent intent1 = new Intent(Main2Activity.this, ZhuActivity.class);
                    startActivity(intent1);
                }
            }

那比较符合我们理解的代码应该是什么样的呢

private void setListener(){
	sign.setOnClickListener(new Listener1());
	
}
class Listener1 implements View.OnClickListener{
	@Override
	public void onClick(View v){
			Intent intent1 = new Intent(Main2Activity.this, ZhuActivity.class);
            startActivity(intent1);
		}
}

使用时

Listener1 listener = new Listener1();
sign.setOnClickListener(listener);

这个例子我们发现要先写一个类继承或实现自父类,然后再调用时,需要先new出子类对象,然后再送进参数里使用,比较麻烦,所以当只使用一次时,就直接使用匿名内部类就好了

总结

匿名内部类在编译的时候系统自动起名为Outter$1.class,一般来说,匿名内部类用于继承其他类或是实现接口,并不需要添加额外的方法,只是对继承方法的实现或是重写



上一篇 Java异常

Comments

Content