java中子类继承父类构造函数,java中子类如何继承父类

  java中子类继承父类构造函数,java中子类如何继承父类

  首先,构造方法本身将有一个隐式的无参数构造(默认):

  不要写构造方法,类的第一行代码其实有一个默认的无参数构造(系统会隐式的给你写)

  公共课学生{

  私有字符串名称;

  //public Student() {}在这里隐式“写”,你看不到

  //虽然strudent类中没有写构造方法,但是相当于有了上面的无参数构造。

  //只是隐式的,看不出来

  }(推荐视频:java视频教程

  只写带参数的构造方法,相当于只写带参数的构造方法(不带参数的隐式构造会被屏蔽忽略,视为无效)。

  公共课学生{

  私有字符串名称;

  公共学生(字符串名称){

  this.name=name

  }

  //此时,原Strudent类中的隐式无参数构造方法被阻塞,无效。

  //类中只有带参数的构造

  } 如果希望既有无参数结构又有无参数结构,必须显式写出无参数结构和无参数结构。

  公共课学生{

  私有字符串名称;

  公共学生(){}

  //显式写出无参数构造

  公共学生(字符串名称){

  this.name=name

  }

  //如果想在Strudent类中有一个无参数的构造函数,就必须显式地写出来。

  }进一步结合继承,需要考虑子父类:

  在子类的构造方法中(带参数和不带参数),方法中的第一行代码隐式包含父类的无参数构造方法。

  也就是超级()

  公共课Stu扩展学生{

  私有字符串名称;

  公共Stu() {

  //super();

  //在子类的无参数构造中,super()隐式“写”在这里

  }

  公共Stu(字符串名){

  //super();

  this.name=name

  //在子类的参数构造中,上面的super()也隐式“写”在这里。

  }

  }这就是为什么在调用子类的构造函数时,先调用父类的无参数构造函数,因为默认的super()是存在的。

  (5)同样,类似于上面的(2),如果此时写一个参数构造,super(xx)会屏蔽隐式的super()。

  公共课Stu扩展学生{

  私有字符串名称;

  公共Stu(字符串名){

  //super();这里写的原隐式super()被阻塞无效。

  超级(名);

  //在子类的参数构造中,由于super(name)的存在,super()无效

  //此时子类的参数构造中只有super(name)。

  }

  }这就是为什么当父类没有无参数构造时(即只有参数化构造3354对应的情况),子类的构造方法编译无法通过。这是因为子类的构造函数(有或没有参数)会调用父类的无参数构造函数。因为编译器试图将super()插入到一个子类的2个构造函数中,但是父类的默认构造函数未定义,所以编译器会报错。

  为了解决这个问题,我们只需要

  1)向父类添加无参数构造函数3354向父类显式添加无参数构造函数。

  2)删除父类中的自定义参数化构造函数3354相当于恢复默认的无参数构造函数。

  3)将Super(XXX)添加到子类构造函数3354中。通过的原体屏蔽掉默认的super()。

  本文来自我们,java教程专栏,欢迎学习!以上是JAVA继承中子父类构造方法的详细内容。更多请关注我们的其他相关文章!

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: