黑马程序员技术交流社区

标题: java中为什么抽象类继承实体类的前提是实体类有明确的构造函数? [打印本页]

作者: 徐丹    时间: 2012-11-6 20:26
标题: java中为什么抽象类继承实体类的前提是实体类有明确的构造函数?
java中为什么抽象类继承实体类的前提是实体类有明确的构造函数?
作者: 舒远    时间: 2012-11-6 20:31
什么叫明确的构造函数?这个词我怎么从来没听过、、
作者: 黑马吕世成    时间: 2012-11-6 21:14
先不管子类是否是一个abstract类,一般我们子类要继承父类的时候都会先去调用父类的构造函数,可以隐性调用也可以用super()去调用。这个你应该懂吧!

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

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

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

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

作者: 奋斗的青春    时间: 2012-11-6 21:22
这个问题把我问蒙了 。
作者: 王振    时间: 2012-11-6 21:24
  1. public class Student {

  2. }

  3. public abstract class Boy extends Student {

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

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

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

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




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2