在java中使用对象实例化定义方法

时间:2014-12-05 03:55:31

标签: java

我慢慢地从C ++过渡到java,我不明白以下代码:

public class TestThread 
{
    public static void main (String [] args) 
    {
        Thread t = new MyThreads() 
        {
            public void run() 
            {
                System.out.println(" foo");
            }
        };
        t.start();
        System.out.println("out of run");
    }
}

对象类型" MyThreads"正在被实例化,但是函数" void运行"意思?

为什么在对象实例化之后立即使用该语法编写?

该功能是否被覆盖?

何时需要/需要这种语法(我用对象实例化定义函数)?它在哪里首选/有用?

2 个答案:

答案 0 :(得分:0)

此代码相当于

public class TestThread 
{
    static class MyThreadSubclass extends MyClass {
       public void run() {
         System.out.println("foo");
       }
    }
    public static void main (String [] args) 
    {
        Thread t = new MyThreadSubclass();
        t.start();
        System.out.println("out of run");
    }
}

这是一种定义内联子类的简便方法,无需为其命名;这只是语法糖。它创建了一个子类的对象,它覆盖了run()中的方法MyThreads

答案 1 :(得分:0)

这意味着类MyThreads或者要求您首先编写名称为run的方法,或者您正在执行的方式提供了更改现有run方法行为的能力。

如果您已经存在run方法或者在您想要创建对象时创建方法,那就像重写一样。

这提供了创建MyThreads对象的功能,而无需更改原始类或创建多个类。

public class TestThread 
{
    public static void main (String [] args) 
    {
        Thread t = new MyThreads() 
        {
            public void run() 
            {
                System.out.println(" foo");
            }
        };
        t.start();

        Thread t1 = new MyThreads() 
        {
            public void run() 
            {
                System.out.println(" this time it is somethidn else");
            }
        };
        t1.start();

        System.out.println("out of run");
    }
}

对代码的修改很少显示具有此功能的优势。如果你观察到t1的run方法正在做一些不同于t的东西。所以它现在是全新的线程。