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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© wangchao1686 中级黑马   /  2013-12-8 01:03  /  872 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

子类继承父类后是否也继承了父类的构造函数了呢?看的视频上没有说到,在子类的构造函数中是通过super语句访问的父类的构造函数。既然子类继承了父类,子类就有了父类的属性和方法,构造函数作为一个函数,我想也应该被继承吧。可是我试了试,不通过super语句是没法调用父类的够函数的,求大神解答。

评分

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

查看全部评分

4 个回复

倒序浏览
不通过super依然可以调用父类的构造函数啊,例如下面所示,会打印
"fun run."
子类默认实现了父类的无参构造函数,自动调用了super语句。
  1. public class Demo6
  2. {
  3.         public static void main(String[] args)
  4.         {
  5.                 new Zi();
  6.         }
  7. }
  8. class Fu
  9. {
  10.         public Fu()
  11.         {
  12.                 System.out.println("fu run.");
  13.         }
  14. }

  15. class Zi extends Fu
  16. {

  17. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
简★零度 + 1

查看全部评分

回复 使用道具 举报
你的意思我明白,但是这是隐式的super语句。还是通过super来调用的啊。
回复 使用道具 举报
本帖最后由 Weix1992 于 2013-12-8 13:48 编辑
wangchao1686 发表于 2013-12-8 12:33
你的意思我明白,但是这是隐式的super语句。还是通过super来调用的啊。
  1. public class Demo6
  2. {
  3.         public static void main(String[] args)
  4.         {
  5.                 new Zi();
  6.         }
  7. }
  8. class Fu
  9. {
  10.         public Fu()
  11.         {
  12.                 System.out.println("fu run.");
  13.         }
  14. }

  15. class Zi extends Fu
  16. {

  17. }
复制代码


借用一下2L的代码,你每次new子类对象的时候,会调用子类的构造方法,但是其实子类的每个构造方法第一行都会默认有suepr()这句话,只不过是隐藏的,那么久是隐式调用
还有就是不能继承构造函数的原因之一,构造函数名字必须与类名保持一致,如果继承了那么久冲突了

评分

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

查看全部评分

回复 使用道具 举报
本帖最后由 绕世界流浪丶 于 2013-12-8 15:27 编辑

子类继承父类后,父类的所有方法和构造函数都可以重写,成员变量什么的都能通过super调用了。。。super调用的是方法里面的参数,方法是可以重写的。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马