A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 王陶成 中级黑马   /  2012-9-22 12:48  /  1658 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 王陶成 于 2012-9-22 14:50 编辑



        抽象类不可以new,那么它有构造方法有什么用了

3 个回复

倒序浏览
不过当你实例化抽象类子类的时候抽象类是会被实例化的~~~
来子类里可以用super来调用抽象类中的方法
既然要实例化那构造方法当然有意义啦

因为子类的构造方法,如果没用super(xxx)指定调用父类的某个构造方法,默认都要在构造方法里第一句添加super()来调用父类的空构造方法。

评分

参与人数 1技术分 +1 收起 理由
刘芮铭 + 1 赞一个!

查看全部评分

回复 使用道具 举报
共同学习
抽象类概念我就不多说了,简单说父亲是抽象类的类必须实现所有抽象方法,除非这个类也是抽象类。说明下你问的问题
1.首先你要搞清楚java里new这个关键字,new说的是要调用构造方法,分配内存空间,创建实例,这是显示的new出来一个对象,抽象类是不允许new的,但是抽象类可以有构造方法,我们知道通常创建类的实例需要new 类();这种形式,但是只能说new调用构造方法才是创建对象,而抽象类不可以有实例,但是可以调用构造方法,因为它不是new调用,而是通过new子类,根据依赖关系,自动调用的,稍微扩展点说java中字节码文件.class中有init初始化方法,JVM要想用一个类,必须要有加载,连接,初始化这三部分组成,而只有加载这个过程对程序员可见,这就扯到类加载器classloader上去了,不多说,和这问题无关。最终结论是说,调用构造方法不一定创建实例(看怎么调用),创建实例也不一定需要调用构造方法,比如调用本地函数,通过C++等创建实例,java垃圾回收机制只能自动回收new出来的对象,并不会回收通过本地native方法创建的对象,因为这种是通过c++创建的,当然垃圾回收机制和你问的问题也没关系
回复 使用道具 举报
抽象类不象具体类那样描述一类具体事物,它是提取多种具有相似性的具体事物的共同特征而产生的,比如,helicoptor, jet, fighter父类plane,有start(),takeOff(),speedUp(),changeDirection()等方法,这是共性,但现实中有一个具体的plane吗?没有,它是抽象出来的,根本不存在。所以实例化一个plane是没有意义的,因此面向对象程序设计机制禁止对象实例化
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马