JAVA - 通过扩展线程类进行多线程 - 关于创建对象

时间:2018-06-04 13:38:59

标签: java multithreading

public class game extends Thread{
    public void run() {
        System.out.println("Sub-class must override the void run() method of Thread class!");
    }
    public static void main(String args[]) {
        Thread t = new Thread();
        t.start();
    }
}

对于上面这些代码行,我在控制台中什么都没有。但对于以下代码:

public class game extends Thread{
    public void run() {
        System.out.println("Sub-class must override the void run() method of Thread class!");
    }
    public static void main(String args[]) {
        game g = new game();
        g.start();
    }
}

我得到了“Sub-class必须覆盖Thread类的void run()方法!”显示在控制台中。

你能帮助我,为什么我需要创建子类的对象而不是Thread类的对象?有什么不同?对不起,我是新手。

2 个答案:

答案 0 :(得分:2)

那是因为在第一个代码中,对象是一个没有任务要运行的默认线程。你可以给线程对象一个像这样的任务,

public class game implements Runnable{
    public void run() {
        System.out.println("Sub-class must override the void run() method of Thread class!");
    }
    public static void main(String args[]) {
        Thread t = new Thread(new game());
        t.start();
    }
}

然而在第二种情况下,你给Thread(它的Sub-class Game)一个默认任务,用它的run方法打印。查看有关线程here

的更多信息

答案 1 :(得分:2)

如果创建父类的实例,编译器将不知道其子类。这就是为什么你需要实例化oppesed到父类的子类。