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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 陶智第 中级黑马   /  2013-9-5 17:15  /  1657 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 陶智第 于 2013-9-7 09:36 编辑

class Super
{
   int i = 0;
   public Super(String s)
   {
      i = 1;
   }
}
class  Demo extends Super
{
   public Demo(String s)
  {
     i = 2;
  }
  public static void main(String[] args)
  {
    Demo d = new Demo("yes");
    System.out.println(d.i);
  }
}
子类如何通过super语句指定要调用的父类中的构造函数?

6 个回复

倒序浏览
毕老师的视频中有讲
你要指定调用父类的某个构造函数的话,至少父类中得有两个构造函数
回复 使用道具 举报
子类 通过super语句隐式调用  的父类中的构造函数的,也就是在子类调用父类的构造器时在构造器的第一句有一个super()语句,只不过在这里是隐式的,还有形参在不使用是就使用无参的构造器就可以的,要不在编译时报找不到参数的

class Super{
        int i=0;
        public Super( ){
                i=1;
        }
}
class Demo extends Super{
        public Demo( ){
            // 这里super();是隐式的
          //super();
                i=2;
        }
        public static void main(String[]args){
                Demo d=new Demo( );
                System.out.println(d.i);
        }
}
最后的结果是2的,因为先调用父类的的构造器,此时i=2,然后再运行自己的参数,结果就是i=2.

回复 使用道具 举报
当父类中没有自定义的构造函数的时候,在子类的构造函数中有一句隐式的super();调用父类空参数的构造函数,而且子类中所有的构造函数第一行都有。
在对子类对象进行初始化时,父类的构造函数也会运行。

当父类中没有空参数构造函数时,子类构造函数必须通过super句来明确要访问的父类中指定的构造函数。在楼主的例子中就是
SuperDemo.java:12: 错误: 无法将类 Super中的构造器 Super应用到给定类型;
  {
  ^
  需要: String
  找到: 没有参数
  原因: 实际参数列表和形式参数列表长度不同
1 个错误

这个是运行结果啊
  public Demo(String s)
  {
      super(s);//这个必须自己手动添加的。因为父类中默认无参的构造函数已经没有了
     i = 2;
  }
回复 使用道具 举报
父类的构造函数参数是什么样的,你子类的super带的参数和其父类的构造函数吻合就是调用了父类的那个构造函数了
回复 使用道具 举报
神之梦 发表于 2013-9-5 21:20
毕老师的视频中有讲
你要指定调用父类的某个构造函数的话,至少父类中得有两个构造函数 ...

这个有点不明白, 为什么父类中得有两个构造函数?  毕老师的哪个视频?
回复 使用道具 举报
首先此段代码不过被编译通过,提示如下:
原因如下,建立子类对象的时候子类会调用父类的默认空参数构造函数super();但此段代码中父类代码中已经覆盖掉空参数的构造函数,子类在调用时找不到super();,所以会报错。
解决办法如下:
  1. class Super
  2. {
  3.    int i = 0;
  4.    public Super(String s)
  5.    {
  6.       i = 1;
  7.    }
  8. }

  9. class  Demo extends Super
  10. {  
  11.    public Demo(String s)
  12.         {
  13.          super(s);  //在此处手动指定父类的构造函数或手动在父类建立空参数的构造函数。
  14.          i = 2;
  15.         }
  16.   public static void main(String[] args)
  17.   {
  18.     Demo d = new Demo("yes");
  19.     System.out.println(d.i);
  20.   
  21.   }
  22. }
复制代码
运行结果是:2
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马