在类中含有abstract的方法,则该类就是抽象类。你不能new一个抽象类,即不能实例化一个抽象类。
一般来说建议能把抽象类中的非abstract方法排除掉,把它变为接口
书上如是说,呵呵。。

解决方案 »

  1.   

    抽象类A
    普通类B,C。都是从A继承出来的。
    A中有abstract方法f1,f2,f3....,这些方法在B,C中才实现。
    这样,对于任何一个B,C的实例,我们都可以把他当作A来使用。
    而且可以访问这些在B,C中实现的方法。
      

  2.   

    抽象类即是不能被实例化的类,而且你不能够在自己的程序里通过这种类来生成一个对象。你也许会认为不能被实例化的类是没多大用处的。事实上,在某些环境下, 抽象类是非常有用的。你可以把它作为一个基础类以此为基类创建新的类。 在对功能要求不高的环境下生成的类,会向你提供一个规定的启始点,通过这个点你可以推导出非抽象类。在此假设一个要用抽象类的程序设计。假设图形程序提供了大量的drawing类:比如圆,三角,曲线等等。所有这些作drawing类都有某个共同的特性,比如位置,大小,色彩,删除等属性。其它的类成员,比如描绘图形的方法就不同于每个单独的类。因此,这样为利用抽象类创造了一个理想的环境
      

  3.   

    不错,加深了理解
    to : learner
    用抽象的方法可是简化编程的工作量
    比如:abstract class aclass {
      ...
      abstract void m1() {};
      ...
    };
    class aex1 extends aclass {
      ...
      void m1() {System.out.println("aex1")};
      ...
    };class aex2 extends aclass {
      ...
      void m1() {System.out.println("aex2")};
      ...
    };public class atest {
      void test(aclass a) {
        a.m1();
      };
      public static void main(String[] args) {
        ...
        aclass a1 = new aex1();
        aclass a2 = new aex2();
        a1.test();
        a2.test();
        ...
      };
    }
    试想一下:如果没有抽象类,atest的test方法是不是要写一部分代码,如果是多个衍生类的话,那多出的代码量可就。呵呵
      

  4.   

    对不起,写错了
    atest中的main部分应该这样的  public static void main(String[] args) {
        ...
        aclass a1 = new aex1();
        aclass a2 = new aex2();
        test(a1);
        test(a2);
        ...
      };