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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

java中为什么抽象类继承实体类的前提是实体类有明确的构造函数?

评分

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

查看全部评分

4 个回复

倒序浏览
什么叫明确的构造函数?这个词我怎么从来没听过、、
回复 使用道具 举报
先不管子类是否是一个abstract类,一般我们子类要继承父类的时候都会先去调用父类的构造函数,可以隐性调用也可以用super()去调用。这个你应该懂吧!

接下来才是关键了,调用父类构造器时,需要有一个跟我们想调用的那个互相匹配的才行,默认情况下是调用无参的那个。

所以abstrac类调用父类时,因为抽象类没有构造函数故而会调用无参的那个构造函数,此时只要父类中有一个无参的构造函数就可以了。可以定义一个无参也可以不定义。

这里说的“明确的构造函数“,我想其实就是想说——你要保证父类中有一个可以供你调用的无参构造函数。

不知道这样说你能明白不?

评分

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

查看全部评分

回复 使用道具 举报
这个问题把我问蒙了 。
回复 使用道具 举报
  1. public class Student {

  2. }

  3. public abstract class Boy extends Student {

  4. }
复制代码
抽象类Boy继承自实体类Student,Student中没有明确的构造函数(但是有默认的无参构造器),编译通过。

这样一个无法被证实的问题,让人如何回答呢?

其实,对于抽象类可不可以继承实体类,我认为完全是可以的。
抽象类也是类,所有类都继承自Object,这不就是在继承吗?

我们来看一下构造函数的问题。
当一个类B继承自类A时,在B中的构造器(无论是有参还是无参)都会隐式调用父类中的无参构造器。
但是当父类中定义了若干个有参构造时,系统将不会再为父类提供隐式的无参构造器。
这时,B类中的构造器将会出错,它就只能显示的调用与其相匹配的父类构造器才能编译通过。

评分

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

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马