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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 黄连兵 中级黑马   /  2012-6-22 10:36  /  1866 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 黄连兵 于 2012-6-22 18:55 编辑

抽象类是不允许被实例化的,其造函数并非抽象函数,那它存在的唯一理由就是供其子类构造函数初始化的时候隐式或者显式地调用super()么?有没有其他作用?
这是不是就和子类初始化必定会调用父类构造函数的说法一致了?

5 个回复

倒序浏览
首先构造函数顾名思义就是构造对象用的,要是没有构造函数哪来的对象,构造函数的另外一个作用就是初始化,构造函数的作用很简单就是构造对象和初始化,子类初始化必须调用父类构造函数这是亘古不变的,和父类是不是抽象类没有关系,即使我们声明一个没有构造函数的抽象类,编译器还会为我们生成一个默认的"protected构造函数。
回复 使用道具 举报
首先明确:
1、在java中只要是类,就有构造函数。我们现在这个程度不用去讨论存在理由。

2、当子类继承父类后,用子类去构建对象的时候,子类构造函数中会有个默认的super指向父类,调用父类的构造函数super()(无参构造函数)。注意如果定义了父类的有参构造函数,则调用父类无参构造函数会失败的。

个人建议哈,学java的时候有的东西不明白不要太深究,很浪费时间,而且以现在的知识面很多问题深究起来只会弄乱自己。有的不明白原理记住规则往下学,积累到一定程度回过头看有些问题根本不是问题了。
回复 使用道具 举报
因为子类实例化对象是一定要调用到父类的构造方法,所以我觉得抽象类的存在的主要作用是过继承它实现来多态的特性,为后期子类要实现的方法提供一个模板,实现重用性
回复 使用道具 举报
这个,百度一下你就知道!
回复 使用道具 举报
这个,百度一下你就知道!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马