黑马程序员技术交流社区

标题: 匿名内部类详解 [打印本页]

作者: 风色月下    时间: 2016-4-26 22:00
标题: 匿名内部类详解
求解答 匿名内部类的运用场景和它重写的方法  怎样去调用
作者: yanwenyong    时间: 2016-4-26 22:44
匿名内部类,
这是一个内部类,
首先:该类的内容量不会太大,通常就过程来讲不要太复杂,
其次:该类需要和其所在的类有着至关重要的联系。
相比较而言,内部类因为没有名字,所以该类只能执行一次
如果确定该类实现的对象只执行某个行为的操作,
例如某个点击监听动作,去实现他的行为,
并且只针对该监听,其他监听不用执行该动作,
这种时候使用匿名内部类

个人总结,感觉一般匿名内部类都是去
通常new 一个接口类或者是一个抽象类
当然也有去直接new 一个实体类  例如多线程的操作
然后再去重写他的方法,来实现匿名内部类
仅仅是个人的感觉

  1. import android.app.Activity;
  2. import android.os.Bundle;
  3. import android.view.View;
  4. import android.view.View.OnClickListener;

  5. public class MainActivity2 extends Activity {

  6.     @Override
  7.     protected void onCreate(Bundle savedInstanceState) {
  8.         super.onCreate(savedInstanceState);
  9.         setContentView(R.layout.activity_main2);
  10.         
  11.         
  12.       
  13.         View view = findViewById(R.id.v);
  14.         /**在此处获取了点击监听的匿名内部类
  15.          * 若点击对象只想执行该命令,
  16.          * 而且该命令只能在此处执行,
  17.          * 那使用匿名内部类可以省略一些不必要的代码
  18.          */
  19.         view.setOnClickListener(new OnClickListener() {
  20.                        
  21.                         @Override
  22.                         public void onClick(View v) {
  23.                                
  24.                         }
  25.                 });
  26.         /**通常状态下是先去创建一个类,去实现OnClickListener接口
  27.          * 然后再去实例化一个对象来进行操作
  28.          */
  29.         view.setOnClickListener(new MyOnClickListener());
  30.         
  31.     }
  32.     /**
  33.      * 此处为创建了一个实现点击监听接口的类
  34.      * 该类不是匿名内部类
  35.      * 因为此类有名字(MyOnClickListener),因此在MainActivity2中
  36.      * 任何地方都可以实例化该类
  37.      */
  38.     private class MyOnClickListener implements OnClickListener{

  39.                 @Override
  40.                 public void onClick(View v) {
  41.                        
  42.                 }
  43.            
  44.     }
  45. ////////////////////万恶的分割线////////////////////////////////////////////////   
  46.     @Override
  47.     protected void onStart() {
  48.             /**
  49.              * 此处为通过匿名内部类获取一个线程对象
  50.              */
  51.              new Thread(){public void run() {
  52.                 
  53.          };}.start();
  54.          
  55.          /**
  56.           * 获取自己创建的内部类对象的实例
  57.           */
  58.          MyThread mt = new MyThread();
  59.          mt.start();
  60.          /**
  61.           * 自己创建的对象可以重复调用
  62.           */
  63.          MyThread mt2 = new MyThread();
  64.          mt2.start();
  65.             super.onStart();
  66.     }
  67.     /**
  68.      * 此处为创建一个类然后去继承Thread类
  69.      *实际上是为了重写里面的run方法
  70.      */
  71.     private class MyThread extends Thread{
  72.             @Override
  73.             public void run() {
  74.                    
  75.                    
  76.                     super.run();
  77.             }
  78.     }
  79. }
复制代码


看看示例代码,希望能帮你区分,内部类和匿名内部类。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2