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

來源:互聯網
上載者:User

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

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.