既然方法、对象什么的都要在新类中重新定义,那写Abstract类还有什么必要呢?谢谢高手指点!

解决方案 »

  1.   

    这就和类的多态及动态加载有关了具个例子
    abstract class A{}
    class  C extends A{}
    class D extends A{}public  class Test{
      public static void main(String args[]){
         A a=new C();
         a=new  D();}
    }
    是不是很有意思啊 
      

  2.   

    推荐你下载本java核心技术看看
    里面第五章继承
    相信你就可以理解了
      

  3.   

    Abstract只告诉你有什么样的方法,但是具体怎么做不告诉你,具体怎么做有你来实现这个~根据你的需求~
      

  4.   

    谢谢高手指点!
    abstract class A{}
    class  C extends A{public void getC(){}}
    class D extends A{}public  class Test{
      public static void main(String args[]){
         A a=new C();          // 这个是使用C类中的方法吧?
         a=new  D();           // 这个是使用D类中的方法吧?
         a.getC();             // 此时a已经被改写,还可以继续使用C中的方法吗?
    }
    }
      

  5.   


     // 这个是使用C类中的方法吧? ---这只是个向上转型,只是实例化,没调用这个类的什么方法,除了构造方法!
     // 这个是使用D类中的方法吧? /
     // 此时a已经被改写,还可以继续使用C中的方法//这里明显编译出错!因为A类没有这个方法,虽然调用的时候是C的方法,但是编译的时候A类没有此方法就出错!
      

  6.   

    非常非常感谢。
    不过如果我这样改,调用的方法是谁的呢?
    abstract class A
    {
    public void get(){}
    }  
    class  C extends A
    {  
    public void get(){System.out.println("I'm C.");}  
    }  
    class D extends A
    {  
    public void getC(){System.out.println("I'm D.");}  
    }  public  class Test{  
      public static void main(String args[]){  
         A a=new C();          
         a=new  D();             
         a.get();             // 此时调用的方法是谁的呢?
    }  
    }
      

  7.   

    D里那个应该是get(),不好意思。
      

  8.   


    如果getC改成 get()
    调用的 public void getC(){System.out.println("I'm D.");}   这个方法。
      

  9.   

    Abstract类里可以预先实现一部分公用的方法,这样旧可以实现代码重用
    另外一些抽象方法可以延迟到子类里实现,实现了针对借口的编程
      

  10.   

    建议lz看一下
    Java的继承与多态
    这部分内容两三句话是说不明白的