在java中有不少的类设计的时候就是abstract的,但是这些类大多数都提供了一些static的方法,通过这些方法能够获得该类的一个实例,然后就可以正常调用该类的一些abstract的方法,请问这是怎么一回事啊

解决方案 »

  1.   

    abstract和static 的功能是要分开说的:使用abstract的作用是为了在父类定义一定的接口,而子类可以实现该接口。作用和 interface类似(个人看法,可能不准确)。
    现在提倡的是面向接口编程,这样就很容易实现多态(OO 的一个重要特点)。
    等等。
    至于static ,就是保证了该方法或者属性,不属于该类的任何一个对象,而属于该类的所有对象共有,保证了唯一性。具体的,请参考<thinking in java>
      

  2.   

    一般abstract类是不能实例化的,但我们可以调用abstract类中的static方法,不过这不是abstract的特性,这是static的特性,因为不管在什么类中,我们都可以直接使用static方法。
    我想搂主说的调用就是这个意思,请看一个简单例子:
    testAbstract.java
    ----------------------------------------
    public abstract class testAbstract { public void hello(){
    System.out.println("hello!");
    }

    public static void helloo(){
    System.out.println("hello0!");
    }
    }--------------------------------------------
    test.java
    public class test {
    public test(){
    }
    public static void  main(String [] args){
    testAbstract.helloo();//直接调用abstract类里面的静态方法
    }
    }
    ---------------------
    如果你使用testAbstract te = new testAbstract ()方式,或者使用
    testAbstract .hello()非静态调用,将是不允许的!
      

  3.   

    我有时候也喜欢这样写,主要的目的就是让客户不需要知道具体类却能得到具体类的instance,对客户隐藏实现的细节啊,客户只需要知道顶层的接口就可以了.
      

  4.   

    感觉几位都没有答到点子上,除了funcreal(为中华之崛起而编程)以外仔细看看楼主的话,感觉有些问题
    在java中有不少的类设计的时候就是abstract的,但是这些类大多数都提供了一些static的方法,通过这些方法能够获得该类的一个实例,然后就可以正常调用该类的一些abstract的方法如何通过抽象类中的static的方法获得该类的一个实例??抽象类是不能被实例化的
    除非是子类
    另外楼主说的是可以调用该类的abstract的方法,而不是调用该类的static的方法
    但是要想调用abstract的方法,必须要在子类实现吧所以,,不知楼主这段话引用自哪里,感觉本身就说得不对
    大家继续讨论讨论吧