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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 tacyjay在路上 于 2014-4-19 23:33 编辑

看毕老师课件PPT上有问题“抽象类中是否有构造函数?”遂连带考虑了题目中的问题。
结果应该是:抽象类有构造函数,接口中没有构造函数


现在问题是:

1.上面的结论正确吗?该如何解释原因?

2.构造函数的作用就是创建对象与初始化,由于抽象类与接口都不能实例化,那么抽象类中的构造函数的作用是不是只有初始化?而初始可以用代码块来完成,那么它的存在又是为了什么?这与构造函数的作用是否矛盾?

3.抽象类中继承的情况,子类父类之间的构造函数又是怎么运行的?



问题比较多,请大家讨论解决一下,谢谢啊。。。。



评分

参与人数 1技术分 +1 收起 理由
SyouRai_Tsk + 1

查看全部评分

4 个回复

倒序浏览
1,对的,父类的构造函数会被子类调用,而且父类的构造函数被子类调用后它会去调用它的父类构造函数,直到Object位置,接口中不会被调用到,而且接口中都是抽象方法,不允许被实例化,所以就没有构造函数
2.抽象类的子类在new对象的时候,子类的构造函数中第一行是super(),这句话的意思是调用父类的无参构造函数,父类中构造函数第一行也是如此,一直到Object,刚刚说过了,所以父类的构造函数是给子类初始化的时候调用用的
3、上面第2说过了

评分

参与人数 1黑马币 +6 收起 理由
tacyjay在路上 + 6 感谢!第2条,父类的构造函数是给子类初始.

查看全部评分

回复 使用道具 举报
正确
首先要明确一点,子类的构造函数一定会调用父类的构造函数。
如果子类的构造函数第一句没有明确调用哪个父类构造函数,那就等于默认调用了super();就是父类的无参构造函数;如果你想调用带参的就明确写super(参数)

评分

参与人数 1黑马币 +6 收起 理由
tacyjay在路上 + 6 谢谢!疑惑主要在于抽象类的构造函数及其继.

查看全部评分

回复 使用道具 举报
1,在抽象类中,可以有自己的属性,这就要给这些属性进行初始化,可以是默认的也可以是显示的,所以抽象类也有构造函数,但子类在继承的时候就要调用父类的构造函数。
比如: 人 有  String name ,  int  age等属性,就要进行初始化;其中 方法可以是抽象的。
          学生 工人 也有上面的属性,初始化要调用父类的构造函数,方法就要实例化。
2,代码块是给对象初始化的,抽象类不能创建对象。
3,子类继承父类,初始化是先调用父类的无参数的构造函数,如果父类没有无参数的构造函数,只有有参数的显示构造函数,那么子类就要手动在子类构造函数的第一行写上super(参数)来初始化。
   不晓得你明白了没?
回复 使用道具 举报
skill20 发表于 2014-4-19 18:41
1,在抽象类中,可以有自己的属性,这就要给这些属性进行初始化,可以是默认的也可以是显示的,所以抽象类也 ...

1.肯能是我把抽象类想的过于复杂了;
2,这一点,我倒不是很同意,比如说静态代码块,是随类加载的,不需要创建对象,类名调用的时候就能初始化了吧。
总之,十分感谢哈
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马