Android里面的匿名類與匿名內部類使用


      在android開發中經常碰到匿名類(和匿名內部類)的使用,那么匿名類和一般情況下使用的類有什么不同,

從實現的功能來講是一樣的,但是使用匿名更加簡潔方便,形式上有點像new一個接口或類的感覺,但是我們必須

記住接口是不可以new出來的(實例化),我們要在內部重寫需要的接口的方法,這樣就new出了一個實現接口

方法的對象,但是這個對象的類名不可見,所以叫做匿名類。下面是功能相同的兩段代碼,分別用上述兩種寫法

實現:

匿名類

形式如下:new <類或接口> <類的主體>

 1 button.setOnClickListener(listener );
2
3 private View.OnClickListener listener = new View.OnClickListener()
4 {
5 @Override
6 public void onClick(View v)
7 {
8 String phonenum = phoneEditText.getText().toString();
9 Intent intent = new Intent("android.intent.action.CALL", Uri.parse("tel:" + phonenum));
10 startActivity(intent);
11 }
12 };// 在這里需要一個分號


自定義繼承接口的類:

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的后面,用其隱含實現一個接口或實現一個類。
  ·因匿名內部類為局部內部類,所以局部內部類的所有限制都對其生效。 

//在方法中返回一個匿名內部類

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();
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM