Android里面的匿名类与匿名内部类使用

Android里面的匿名类与匿名内部类使用
在android开发中经常碰到匿名类(和匿名内部类)的使用,那么匿名类和一般情况下使用的类有什么不同,从实现的功能来讲是一样的,但是使用匿名更加简洁方便,形式上有点像new一个接口或类的感觉。
在android开发中经常碰到匿名类(和匿名内部类)的使用,那么匿名类和一般情况下使用的类有什么不同,从实现的功能来讲是一样的,但是使用匿名更加简洁方便,形式上有点像new一个接口或类的感觉,但是我们必须记住接口是不可以new出来的(实例化),我们要在内部重写需要的接口的方法,这样就new出了一个实现接口方法的对象,但是这个对象的类名不可见,所以叫做匿名类。下面是功能相同的两段代码,分别用上述两种写法实现:

匿名类

形式如下:new <类或接口> <类的主体>

[java] view plaincopyprint?button.setOnClickListener(listener );



private View.OnClickListener listener = new View.OnClickListener()

{

@Override

public void onClick(View v)

{

String phonenum = phoneEditText.getText().toString();

Intent intent = new Intent("android.intent.action.CALL", Uri.parse("tel:" + phonenum));

startActivity(intent);

}

};// 在这里需要一个分号button.setOnClickListener(listener );private View.OnClickListener listener = new View.OnClickListener()
{
@Override
public void onClick(View v)
{
String phonenum = phoneEditText.getText().toString();
Intent intent = new Intent("android.intent.action.CALL", Uri.parse("tel:" + phonenum));
startActivity(intent);
}
};// 在这里需要一个分号自定义继承接口的类:[java] view plaincopyprint?button.setOnClickListener(new ButtonListener());

private final class ButtonListener implements View.OnClickListener{

public void onClick(View v) {

EditText mobileText = (EditText)findViewById(R.id.mobile);

String mobile = mobileText.getText().toString();

Intent intent = new Intent();

intent.setAction("android.intent.action.CALL");

intent.setData(Uri.parse("tel:"+ mobile));

startActivity(intent);

}

}button.setOnClickListener(new ButtonListener());
private final class ButtonListener implements View.OnClickListener{
public void onClick(View v) {
EditText mobileText = (EditText)findViewById(R.id.mobile);
String mobile = mobileText.getText().toString();
Intent intent = new Intent();
intent.setAction("android.intent.action.CALL");
intent.setData(Uri.parse("tel:"+ mobile));
startActivity(intent);
}
}


匿名类不等同于匿名内部类

匿名类不等同于匿名内部类,后者也经常使用,匿名内部类是内部类的种,
使用的时候更加简洁,但是不是任何情况下都需要使用。
在thinking in java 3th 是这么阐述的:

简单地说:匿名内部类就是没有名字的内部类。什么情况下需要使用匿名内部类?如果满足下面的一些条件,使用匿名内部类是比较

合适的:

•只用到类的一个实例。
•类在定义后马上用到。
•类非常小(SUN推荐是在4行代码以下)
•给类命名并不会导致你的代码更容易被理解。
在使用匿名内部类时,要记住以下几个原则:

•匿名内部类不能有构造方法。
.匿名内部类不能定义任何静态成员、方法和类。
•匿名内部类不能是public,protected,private,static。
•只能创建匿名内部类的一个实例。
•一个匿名内部类一定是在new的后面,用其隐含实现一个接口或实现一个类。
•因匿名内部类为局部内部类,所以局部内部类的所有限制都对其生效。

//在方法中返回一个匿名内部类

[java] view plaincopyprint?public class Parcel6

{

public Contents cont()

{

return new Contents()

{

private int i = 11;

public int value()

{

return i;

}

}; // 在这里需要一个分号

}

public static void main(String[] args)

{

Parcel6 p = new Parcel6();

Contents c = p.cont();

}public class Parcel6

{
public Contents cont()

{
return new Contents()

{
private int i = 11;
public int value()

{
return i;
}
}; // 在这里需要一个分号
}

public static void main(String[] args)

{
Parcel6 p = new Parcel6();
Contents c = p.cont();
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值