大家好:
 小弟初学,那天打了段代码入下:
  import java.util.*;
  class TimerTaskDemo extends TimerTask{
  public void run(){
   System.out.println("Timer task executed");
   }
  }  class TimerDemo{
  public static void main(String[] args){
    TimerTaskDemo myTask=new TimerTask();//就是这里出了问题!
    Timer myTimer=new Timer();
    myTimer.schedule(myTask,1000,1000);
    try{
      Thread.sleep(5000);
    }catch(InterruptedException exc){}
    myTimer.cancel();
  }
}报错误了说是new TimerTask()是个抽象类,改成new TimerTaskDemo()就可以了。
小弟不知 抽象类为什么不能直接定义对象啊,它跟普通的类有什么区别啊
请各位赐教!谢谢!!

解决方案 »

  1.   

    TimerTaskDemo myTask=new TimerTask();
    这句是不是不有其它的问题啊,假设TimerTask不是抽象类,拿父类的对象交给子类的与用也是不安全的啊!
      

  2.   

    抽象类要实现其方法才可以被实例化,如果抽象类中有抽象方法,则其实例化或继承时必须实现其抽象方法。
    另外,同意rbin的观点
      

  3.   

    抽象方法,按接口来理解就可以了,只提供declare,不提供实现,在继承的时候才实现。
      

  4.   

    TimerTaskDemo myTask=new TimerTask();是不是应该改成TimerTask myTask = new TimerTaskDemo();呢?
      

  5.   

    只有声明没有方法体的方法就做抽象方法;
    如:public void abstract play();
      

  6.   

    believefym(feng)如果是改成:TimerTask myTask = new TimerTaskDemo();
    是安全的,这正是Upcasting