代码一:
public class TestThread2 {
   public static void main(String[] args) {
Thread thread12 = new Runner1();//1. 此段要是换成 Runner1 thread12=new  Runner1(); 含义又什么不同吗?
thread12.start();
int m = 10;
while (true) {
if (m > 0) {
System.out.println("main thread " + m--);
} else
break;
} }}
class Runner1 extends Thread {
public int s = 10; public void run() {
while (true) {
if (s > 0) {
System.out.println("Running Runner " + s--);
} else
break;
} }}
请问上段代码中将标识段改为Runner1 thread12=new  Runner1(); 含义又什么不同吗?
谢谢各位!

解决方案 »

  1.   

    定义成Runner1可以访问printName这个方法,而定义成Thread不行也就是说对于虚拟机来说这个对象是什么类型的区别,定义成父类是不能访问子类的方法和属性的只能访问定义的类和其父类所具有的方法和属性public class TestThread2
    {
        public static void main(String[] args)
        {
            Thread thread12 = new Runner1();//1. 此段要是换成 Runner1 thread12=new  Runner1(); 含义又什么不同吗? 
            thread12.start();
            
            Runner1 runner = new Runner1();
            runner.printName();             //定义成Runner1可以访问printName这个方法,而定义成Thread不行
            int m = 10;
            while (true)
            {
                if (m > 0)
                {
                    System.out.println("main thread " + m--);
                }
                
                else
                    break;
            }
            
        }
        
    }class Runner1 extends Thread
    {
        public int s = 10;
        
        public void run()
        {
            while (true)
            {
                if (s > 0)
                {
                    System.out.println("Running Runner " + s--);
                }
                else
                    break;
            }
            
        }
        
        public void printName()
        {
            System.out.println(this.getName());
        }
        
    }
      

  2.   

    Thread thread12 = new Runner1();//相当于向上转型了
    一楼说的很明白了
      

  3.   

    繼續請問:那這兩種寫法Thread thread12 = new Runner1 與 Runner1 thread12=new  Runner1(); 
    在執行thread12.start();訪問的run()方法都是同一個嗎?因為在API 上看到類Thread 的start()方法是:使Java 虚拟机调用该线程的 run 方法。這個run()方法是重寫的還是Thread本身的run()方法.我有跑下程式﹐應該都是執行繼承后的Run()方法﹐具體原因為何?兩者有何種區別?
      

  4.   

    多太的问题。看下多太
    这个明白么??
    List lists = new ArrayList();
      

  5.   

    多态  
    父类引用指向子类对象  new的是那个子类对象就调用那个子类的方法