深入Java中的抽象类为何不能实例化? 讨论一下:Java中的抽象类到底为何不能实例化? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 不仅JAVA,其他任何语言都一样~这是由语言的设计决定了的,就是纯粹为了继承而存在。 java里这么规定的,原因我个人认为是抽象类里有未实现的抽象方法,实例化时不能正常分配内存吧,而且调用这个方法时不是要出异常吗 我们老师是这样说的:学过汇编你会知道,程序都有一个代码段,再内存中需要占据一定的内存,而抽象类没有具体的实现方法,无法具体的给它分配内存空间,所以为了安全,不JAVA不允许抽象类,接口直接实例化 Java中是允许不含抽象方法的抽象类的,我认为应该是出于安全的考虑,编译器强制规定不允许抽象类产生对象! 个人认为,是从安全方面考虑的。假设抽象类可以被实例化, public abstract class ParentClass{ public void print(){ System.out.println("un_abstract method"); } public abstract void abstractmethod(); }如果ParentClass pc=new ParentClass()可行的话,那么pc.abstractmethod();呢? 抽象类不能实例化是由Java语法规定的,抽象类是一种设计上的需要,为了描述各种不同的需求Java语言需要支持不同的数据结构。抽象类与接口都不能实例化,继承或实现后就可以实例化了。 一个抽象的东西 有怎么会有它存在的实际意义~ 也就是说你new一个抽象东西 能干嘛~ 而且这样规定的话 对代码的规范也有了很大的改进! 安全方面也确实是一个愿意! 抽象类里的一些抽象方法必须让子类去实现 或者说抽象类本身不是一个完整的类 这样解释会好些吧5L大哥似乎从另一个方面解决这个问题呢..另外 LZ要知道那个抽象方法的含义 介绍他的话实际上就是一个没有实现的方法 但实际运用中这个东西很有趣的 比如抽象类里已经实现了的方法调用了自己的抽象方法? 抽象类不能实例化不知道从什么地方谈起 但是要是问原因的话那是非常多的 浓缩成俩字的话 那就是 安全 abstract class方式中有自己的abstarct方法,也有非abstarct方法而在interface方式的实现中,有静态的不能被修改的数据成员(也就是必须是static final的,不过在接口中一般不定义数据成员),所有的成员方法都是abstract的 这是从设计思想层面的东西,为什么要纠结这个问题呢?说白一点,这就是java的使用规范. 假如可以实例化,调用了abstract方法该如何处理 我觉得从两方面来考虑。其一,哲学角度,抽象基类往往在逻辑上无法实体化,比如说让别人去买水果,不说买什么,就说买水果,显然是买不到一种叫“水果”的东西的。其二,反面考虑,假如从语法上允许实例化一个抽象类。Java不熟悉,以C++来说吧,那么实现编译器的时候就要面临如何处理virtual void foo()=0;这样的函数符号,这种符号没有函数体,不能为之在代码段分配任何的空间,没有地址,仅仅是个符号,必须要修改编译器才能处理这种特殊的空符号。而且需要扫描所有的代码,禁止调用foo()这个函数,允许实例化一个对象,却不准调用这个对象的某个方法(总不能强制要求所有的纯虚函数必须是private的吧!),这就像一个语法中的黑洞,于情于理都说不过去。 抽象类只在分配了在栈中的引用,没有分配堆中的内存。程序都有一个代码段,再内存中需要占据一定的内存,而抽象类没有具体的实现方法,无法具体的给它分配内存空间,所以为了安全,不JAVA不允许抽象类,接口直接实例化 类和对象的内存结构 请教怎么去学校JAVA的包呢? 关于打包的问题!! 觉得自己菜的进来看下 绝对有帮助 [基础问题] 一个矩阵求值算法!给个程序更好 !嘿嘿! [请教]那个给我讲解一下这个源代码的涵义 这个JTreet 怎么了? 大家帮我看一下小程序 深入讨论reference 高手请来指点 一个画图的简单问题 关于JDK1.7调用ECC算法的使用 打印流的小问题
学过汇编你会知道,程序都有一个代码段,再内存中需要占据一定的内存,而抽象类没有具体的实现方法,无法具体的给它分配内存空间,所以为了安全,不JAVA不允许抽象类,接口直接实例化
Java中是允许不含抽象方法的抽象类的,我认为应该是出于安全的考虑,编译器强制规定不允许抽象类产生对象!
假设抽象类可以被实例化, public abstract class ParentClass{
public void print(){
System.out.println("un_abstract method");
}
public abstract void abstractmethod();
}
如果ParentClass pc=new ParentClass()可行的话,那么pc.abstractmethod();呢?
而且这样规定的话 对代码的规范也有了很大的改进!
安全方面也确实是一个愿意!
5L大哥似乎从另一个方面解决这个问题呢..另外 LZ要知道那个抽象方法的含义 介绍他的话实际上就是一个没有实现的方法 但实际运用中这个东西很有趣的 比如抽象类里已经实现了的方法调用了自己的抽象方法?
抽象类不能实例化不知道从什么地方谈起 但是要是问原因的话那是非常多的 浓缩成俩字的话 那就是 安全
而在interface方式的实现中,有静态的不能被修改的数据成员(也就是必须是static final的,不过在接口中一般不定义数据成员),所有的成员方法都是abstract的
说白一点,这就是java的使用规范.
其一,哲学角度,抽象基类往往在逻辑上无法实体化,比如说让别人去买水果,不说买什么,就说买水果,显然是买不到一种叫“水果”的东西的。
其二,反面考虑,假如从语法上允许实例化一个抽象类。Java不熟悉,以C++来说吧,那么实现编译器的时候就要面临如何处理virtual void foo()=0;这样的函数符号,这种符号没有函数体,不能为之在代码段分配任何的空间,没有地址,仅仅是个符号,必须要修改编译器才能处理这种特殊的空符号。而且需要扫描所有的代码,禁止调用foo()这个函数,允许实例化一个对象,却不准调用这个对象的某个方法(总不能强制要求所有的纯虚函数必须是private的吧!),这就像一个语法中的黑洞,于情于理都说不过去。