黑马程序员技术交流社区

标题: 构造函数的传递问题 [打印本页]

作者: 张翼    时间: 2011-11-12 19:10
标题: 构造函数的传递问题
class acc2
{
           public acc2()
           {
                   System.out.print("1");
           }
}
class acc1 extends acc2
{
           public acc1()
           {
                   System.out.print("2");
           }
}
public class acc extends acc1
{
           public acc()
           {
                   super.super();
                   System.out.print("3");
           }
           public static void main(String argv[])
           {
                   acc t=new acc();
           }
}怎么就无法编译呢?super不就是相当于父类的对象吗,调用super方法即调用父类的构造函数,这哪有问题呢?
作者: qy    时间: 2011-11-12 20:19
在acc类中的无参构造函数中应该是super()的吧;来调用父类!
作者: 坚强    时间: 2011-11-12 20:55
我把第20行改了点,你看下,不过还是有问题

  1. class acc2
  2. {
  3.            public acc2()
  4.            {
  5.                    System.out.print("1");
  6.            }
  7. }
  8. class acc1 extends acc2
  9. {
  10.            public acc1()
  11.            {
  12.                    System.out.print("2");
  13.            }
  14. }
  15. public class acc extends acc1
  16. {
  17.            public acc()
  18.            {
  19.                    super(super());
  20.                    System.out.print("3");
  21.            }
  22.            public static void main(String argv[])
  23.            {
  24.                    acc t=new acc();
  25.            }
  26. }
复制代码

2.jpg (12.2 KB, 下载次数: 24)

2.jpg

作者: 坚强    时间: 2011-11-12 20:55
是第19行
作者: 史晓霞    时间: 2011-11-12 21:48
你调用了父类不存在的构造方法,如果你在类中定义了构造方法,如果你不写无参数构造方法它是不存在的,只有你不写时,它才有一个无参的默认构造方法,你在父类写了构造方法在子类的构造函数中,你要写上调用存在的构造方法,super();是调用空构造函数
作者: 别让生命去等待_    时间: 2011-11-12 22:37
子父类构造函数间调用就是super();
而super.super();是什么呀,是另一个对象了吧,而这对象不存在吧,当然不通过
就你上个列子就说 super.super();相当于acc1.acc1();没这个对象吧!




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