A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 草上飞 中级黑马   /  2012-10-21 21:43  /  2281 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

怎样创建匿名内部类?

4 个回复

倒序浏览
1.什么时候用到匿名内部类:
    只用到类的一个实例。
    类在定义后马上用到。
    类非常小(SUN推荐是在4行代码以下)
    给类命名并不会导致你的代码更容易被理解
2.如何创建内部类
   匿名内部类不能有构造方法。
   匿名内部类不能定义任何静态成员、方法和类。
   匿名内部类不能是public,protected,private,static。
   只能创建匿名内部类的一个实例。
    一个匿名内部类一定是在new的后面,用其隐含实现一个接口或实现一个类。
   因匿名内部类为局部内部类,所以局部内部类的所有限制都对其生效。
   
回复 使用道具 举报
interface A{
        public void println();
}
class X{
        public void fun1(){
                this.fun2(new A(){
                        public void println(){
                                System.out.print("hello world");
                        }
                }
);
        }
        public void fun2(A a){
                a.println();
        }
}
public class Nolnner {
        public static void main(String args[]){
                new X().fun1();
        }
}
红色的部分定义了一个匿名内部类?希望对你有所帮助
回复 使用道具 举报
匿名内部类必须有个前提:内部类必须继承或实现一个外部接口或类。
格式:new 父类或接口 (){子类内容}
例:abstract class demo
{
     abstract void show();
}
class Outer
{
     int num=1;
     class Inner extends demo
     {
          void show(){System.out.println(num);}
     }
     public void method(){new Inner().show();}//上面写的代码不是匿名的写法
    /*下面为匿名写法
    new demo() {
         public void show()
         {
               System.out.println(num);
         }
}这其实就是一个有点胖的对象而已
   */
}希望对你有用
回复 使用道具 举报
匿名内部类有个前提:内部类必须继承或实现一个外部接口或类。或者该匿名内部类只使用一次。
new Thread()
                {
                        public void run()
                        {
                                for(int x=0; x<100; x++)
                                {
                                        System.out.println(Thread.currentThread().getName()+"....."+x);
                                }
                        }
                }.start();   这就是匿名内部类对象,只使用一次的情况。
               


                for(int x=0; x<100; x++)
                {
                        System.out.println(Thread.currentThread().getName()+"....."+x);
                }

                Runnable r  = new Runnable()
                {
                        public void run()
                        {
                                for(int x=0; x<100; x++)
                                {
                                        System.out.println(Thread.currentThread().getName()+"....."+x);
                                }
                        }
                };
                new Thread(r).start();   通过实现Runnable接口来实现匿名内部类


               
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马