讨论一下:Java中的抽象类到底为何不能实例化?

解决方案 »

  1.   

    不仅JAVA,其他任何语言都一样~这是由语言的设计决定了的,就是纯粹为了继承而存在。
      

  2.   

    java里这么规定的,原因我个人认为是抽象类里有未实现的抽象方法,实例化时不能正常分配内存吧,而且调用这个方法时不是要出异常吗
      

  3.   

    我们老师是这样说的:
    学过汇编你会知道,程序都有一个代码段,再内存中需要占据一定的内存,而抽象类没有具体的实现方法,无法具体的给它分配内存空间,所以为了安全,不JAVA不允许抽象类,接口直接实例化
      

  4.   


    Java中是允许不含抽象方法的抽象类的,我认为应该是出于安全的考虑,编译器强制规定不允许抽象类产生对象!
      

  5.   

    个人认为,是从安全方面考虑的。
    假设抽象类可以被实例化,     public abstract class ParentClass{
                 
                public void print(){
                    System.out.println("un_abstract method");
                }
                
                public abstract void abstractmethod();
          }
    如果ParentClass pc=new ParentClass()可行的话,那么pc.abstractmethod();呢?
      

  6.   

    抽象类不能实例化是由Java语法规定的,抽象类是一种设计上的需要,为了描述各种不同的需求Java语言需要支持不同的数据结构。抽象类与接口都不能实例化,继承或实现后就可以实例化了。
      

  7.   

    一个抽象的东西 有怎么会有它存在的实际意义~  也就是说你new一个抽象东西 能干嘛~  
      而且这样规定的话 对代码的规范也有了很大的改进!  
        安全方面也确实是一个愿意! 
      

  8.   

    抽象类里的一些抽象方法必须让子类去实现 或者说抽象类本身不是一个完整的类 这样解释会好些吧
    5L大哥似乎从另一个方面解决这个问题呢..另外 LZ要知道那个抽象方法的含义 介绍他的话实际上就是一个没有实现的方法 但实际运用中这个东西很有趣的 比如抽象类里已经实现了的方法调用了自己的抽象方法?
     抽象类不能实例化不知道从什么地方谈起 但是要是问原因的话那是非常多的 浓缩成俩字的话 那就是 安全
      

  9.   

    abstract  class方式中有自己的abstarct方法,也有非abstarct方法
    而在interface方式的实现中,有静态的不能被修改的数据成员(也就是必须是static  final的,不过在接口中一般不定义数据成员),所有的成员方法都是abstract的
      

  10.   

    这是从设计思想层面的东西,为什么要纠结这个问题呢?
    说白一点,这就是java的使用规范.
      

  11.   

    假如可以实例化,调用了abstract方法该如何处理
      

  12.   

    我觉得从两方面来考虑。
    其一,哲学角度,抽象基类往往在逻辑上无法实体化,比如说让别人去买水果,不说买什么,就说买水果,显然是买不到一种叫“水果”的东西的。
    其二,反面考虑,假如从语法上允许实例化一个抽象类。Java不熟悉,以C++来说吧,那么实现编译器的时候就要面临如何处理virtual void foo()=0;这样的函数符号,这种符号没有函数体,不能为之在代码段分配任何的空间,没有地址,仅仅是个符号,必须要修改编译器才能处理这种特殊的空符号。而且需要扫描所有的代码,禁止调用foo()这个函数,允许实例化一个对象,却不准调用这个对象的某个方法(总不能强制要求所有的纯虚函数必须是private的吧!),这就像一个语法中的黑洞,于情于理都说不过去。
      

  13.   

    抽象类只在分配了在栈中的引用,没有分配堆中的内存。程序都有一个代码段,再内存中需要占据一定的内存,而抽象类没有具体的实现方法,无法具体的给它分配内存空间,所以为了安全,不JAVA不允许抽象类,接口直接实例化