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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© zl78365336 中级黑马   /  2013-11-9 10:41  /  1351 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

请问各位师兄:
      在主函数,调用子类的有参构造函数时,父类要写空参数构造函数,或子类的有参构造函数一定要通过super语句调用父类的空参数构造函数吗? 谢谢!

6 个回复

正序浏览
子类实例化过程中,至少要有一个子类构造函数调用父类构造函数,要不自己指定有参的父类构造函数,要不系统默认添加super();空参数构造函数。

这是乌龟的臀部!!!
回复 使用道具 举报
我自己试过了,子类调用父类,父类一定要有无参构造函数
谢谢各位!
回复 使用道具 举报
子类默认调用父类无参构造器,构造器第一行默认是super(),
如果子类调用了父类有参构造器,那么就不会调用父类无参构造器了。
回复 使用道具 举报
是的啊。在子类的构造函数中,如果没有写,就都会默认的有super(),当你 调用子类有参数构造函数时 就会去访问父类的无参数构造函数。
回复 使用道具 举报
一个子类继承一个父类,调用子类的有参构造函数实例化子类时,默认会先走父类的空参构造函数。
也就是在子类的有参构造函数中的第一句代码,如果没有显示指定调用父类的哪一个构造函数或者显示指定调用自身的哪一个构造函数,
默认调用父类的空参构造函数,也就是有一句代码:super();,这是系统默认加上的。
子类的有参构造函数不一定要通过super语句调用父类的空参数构造函数,可以调用自身的其他构造函数。
不过,调用自身的其他构造函数中,如果没有显示指定调用父类的哪一个构造函数或者显示指定调用自身的其他另一个构造函数,默认调用父类的空参构造函数。
回复 使用道具 举报
  1. class Demo_Extends {
  2.         public static void main(String[] args) {
  3.          fu z = new zi("张三",12);
  4.         }
  5. }
  6. class fu {

  7.         private String name;
  8.         private int age;
  9.        
  10.         //父类无参构造函数
  11.         fu() {
  12.                 System.out.println("父类的无参构造函数");
  13.         }

  14.         //父类有参构造函数
  15.         fu(String name, int age) {
  16.                 this.name = name;
  17.                 this.age = age;
  18.                 System.out.println("父类的有参构造函数");
  19.                 System.out.println("父类的姓名"+name+"年龄"+age);
  20.         }

  21.         void say() {
  22.                 System.out.println("这是父类");
  23.         }       
  24. }

  25. class zi extends fu {
  26.        
  27.         //子类无参构造函数
  28.         zi() {
  29.                 super();//即使不写系统默认
  30.                 System.out.println("子类的无参构造函数");
  31.         }

  32.         //子类有参构造函数
  33.         zi(String name, int age) {
  34.                 super(name,age);//通过super(name,age)调用父类有参的构造函数
  35.                 System.out.println("子类的有参构造函数");
  36.                 System.out.println("子类的姓名"+name+"年龄"+age);
  37.         }

  38.         //重写父类的方法
  39.         void say() {
  40.                         System.out.println("这是子类");
  41.                 }
  42. }
复制代码
---------------------------------------------------------------------------
希望对你有帮助
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马