黑马程序员技术交流社区

标题: 继承调用 [打印本页]

作者: zl78365336    时间: 2013-11-9 10:41
标题: 继承调用
请问各位师兄:
      在主函数,调用子类的有参构造函数时,父类要写空参数构造函数,或子类的有参构造函数一定要通过super语句调用父类的空参数构造函数吗? 谢谢!
作者: Sasson    时间: 2013-11-9 11:04
  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. }
复制代码
---------------------------------------------------------------------------
希望对你有帮助
作者: 中关村阿旺    时间: 2013-11-9 12:09
一个子类继承一个父类,调用子类的有参构造函数实例化子类时,默认会先走父类的空参构造函数。
也就是在子类的有参构造函数中的第一句代码,如果没有显示指定调用父类的哪一个构造函数或者显示指定调用自身的哪一个构造函数,
默认调用父类的空参构造函数,也就是有一句代码:super();,这是系统默认加上的。
子类的有参构造函数不一定要通过super语句调用父类的空参数构造函数,可以调用自身的其他构造函数。
不过,调用自身的其他构造函数中,如果没有显示指定调用父类的哪一个构造函数或者显示指定调用自身的其他另一个构造函数,默认调用父类的空参构造函数。
作者: 卑微の小幸福    时间: 2013-11-9 13:04
是的啊。在子类的构造函数中,如果没有写,就都会默认的有super(),当你 调用子类有参数构造函数时 就会去访问父类的无参数构造函数。
作者: ciowok    时间: 2013-11-9 14:15
子类默认调用父类无参构造器,构造器第一行默认是super(),
如果子类调用了父类有参构造器,那么就不会调用父类无参构造器了。
作者: zl78365336    时间: 2013-11-9 14:46
我自己试过了,子类调用父类,父类一定要有无参构造函数
谢谢各位!
作者: 梁健生    时间: 2013-11-9 15:20
子类实例化过程中,至少要有一个子类构造函数调用父类构造函数,要不自己指定有参的父类构造函数,要不系统默认添加super();空参数构造函数。

这是乌龟的臀部!!!




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