黑马程序员技术交流社区

标题: 接口不能实例化,那new Runnable(){....}怎么解释? [打印本页]

作者: 刘忠德    时间: 2012-1-1 19:52
标题: 接口不能实例化,那new Runnable(){....}怎么解释?
本帖最后由 刘忠德 于 2012-1-2 22:38 编辑

RT,接口不能实例化,那new Runnable(){....}怎么解释?
作者: 詹英鹏    时间: 2012-1-1 19:59
new Runnable(){
......
};
后面的分号了吗?
这句实现了Runnable接口。
{};
大括号中的是实现方法。
这个应该是个匿名内部类
下面这个列子就是他的一个用法
public static void start(final String host, final DatagramSocket socket) throws java.net.UnknownHostException
    {
        Runnable udpService = new Runnable()
        {
            public void run()
            {
                if (host != null)
                {
                    try
                    {
                        AbstractDatagramSocket.addDatagramSocket(host, socket);
                    }
                    catch (UnknownHostException e)
                    {
                        LOGGER.error(null, e);
                    }
                }

                try
                {
                    MyOodbTunnelUdp tunnelUdp = new MyOodbTunnelUdp(socket);
                    tunnelUdp.mainloop();
                }
                catch (Exception e)
                {
                    if (socket.isClosed() == false)
                    {
                        LOGGER.error(null, e);
                    }
                }

                if (host != null)
                {
                    try
                    {
                        AbstractDatagramSocket.removeDatagramSocket(host);
                    }
                    catch (UnknownHostException e)
                    {
                        LOGGER.error(null, e);
                    }
                }
            }
        };


作者: 颜宗茂    时间: 2012-1-1 21:01
这是匿名内部类的语法和用法。表示一个实现了Runnable的新类的一个对象。
作者: 黄湘怡    时间: 2012-1-1 22:05

这个是一个匿名内部类~!
一个类如果只使用一次, 那么就可以定义为匿名内部类.
定义方式: new 父类名(){类定义}
这样做是先声明了一个指定父类的子类, 然后用这个子类创建了一个对象
  1. new Thread(new Runnable(){
  2.                        
  3.                         public void run(){
  4.                                 for(int x = 0; x < 10;x++){
  5.                                         System.out.println("x = "+x);
  6.                                 }
  7.                         }
  8.                 }).start();
  9.                        
复制代码

作者: wsssx    时间: 2012-1-2 16:20
提示: 作者被禁止或删除 内容自动屏蔽




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