黑马程序员技术交流社区

标题: 来人了大家帮忙找错误 为什么错了 [打印本页]

作者: 走遍世界找寻你    时间: 2013-11-5 21:23
标题: 来人了大家帮忙找错误 为什么错了
class ExtendsDemo2 {
        public static void main(String[] args) {
                //Zi z = new Zi();
                Zi z1 = new Zi("zhangsan",23);
        }
}
class Fu {
        String name;
        int age;
        public void Fu(String name,int age) {
                this.name = name;
                this.age = age;
                System.out.println("aaaa");
        }
}
class Zi extends Fu {
        public void Zi(String name,int age) {
                this.name = name;
                this.age = age;
                System.out.println("bbbb");
        }
}


作者: 零下五度的水    时间: 2013-11-5 21:33
构造器是没有返回值的。。。。
作者: Sasson    时间: 2013-11-5 21:42
把两个类的构造函数前的void去掉
作者: Uncle.Lee    时间: 2013-11-5 21:43
你犯了两种错误:
1,构造函数没有返回值

作者: Uncle.Lee    时间: 2013-11-5 22:00
你犯了两种错误:
1,构造函数没有返回值,你却给它加了返回值
   改正方法:去掉Fu和Zi前面的viod

2,你定义的Fu(String name,int age){}这个构造方法把JVM默认的无参构造方法Fu(){ }给覆盖掉了
   JVM默认子类的构造方法在调用父类的无参构造方法,由于父类无参构造被覆盖造成错误,这个个问题解决方法有两个:
    <1>改父类,把父类的无参构造明确写出来,这样就不会被覆盖掉了;如下:
     class Fu {
        String name;
        int age;

        Fu() {
        }

        public Fu(String name, int age) {
                this.name = name;
                this.age = age;
                System.out.println("aaaa");
        }
}

      <2>改子类,在子类中明确写出调用父类的带参数的构造方法,如下:
     class Zi extends Fu {
        public Zi(String name, int age) {
                 super(name,age);

                System.out.println("bbbb");
        }
}
第二种方法明显比第一种要好的多,完整的代码如下:
public class ExtendsDemo2 {
        public static void main(String[] args) {
                // Zi z = new Zi();
                Zi z1 = new Zi("zhangsan", 23);
        }
}

class Fu {
        String name;
        int age;

        Fu() {
        }

        public Fu(String name, int age) {
                this.name = name;
                this.age = age;
                System.out.println("aaaa");
        }
}

class Zi extends Fu {
        public Zi(String name, int age) {
                 super(name,age);

                System.out.println("bbbb");
        }
}
作者: 楞个里格朗    时间: 2013-11-5 22:18
不需要定义void返回值
作者: wenbaoxing    时间: 2013-11-5 22:47
请看我的注解:
  1. class Test {
  2.         public static void main(String[] args) {
  3.                 // Zi z = new Zi();
  4.                 Zi z1 = new Zi("zhangsan", 23);
  5.         }
  6. }

  7. class Fu {
  8.        
  9.         String name;
  10.         int age;

  11.         //构造函数我们一般不用public和private修饰,也不定义返回值。
  12.         //当我们在这个类之外不想让其他类创建本类对象时,我们将构造函数私有化(用private修饰),
  13.         Fu(String name, int age) {
  14.                 this.name = name;
  15.                 this.age = age;
  16.                 System.out.println("aaaa");
  17.         }
  18. }

  19. class Zi extends Fu {
  20.        
  21.         //存在继承关系时我们可以用super关键字直接调用父类的相关参数的构造函数,当然现在这个父类只有一个构造函数
  22.         //那我们就只能调用父类的这个Fu(String name, int age)构造函数了
  23.         Zi(String name, int age) {
  24.                 super(name,age);
  25.                 System.out.println("bbbb");
  26.         }
  27. }
复制代码

作者: 剑魂    时间: 2013-11-5 23:10

  1. class ExtendsDemo2 {
  2.         public static void main(String[] args) {
  3.                 //Zi z = new Zi();
  4.                 Zi z1 = new Zi("zhangsan",23);
  5.         }
  6. }
  7. class Fu {
  8.         String name;
  9.         int age;
  10.                 //改正:构造函数没有返回值,方法名与类名相同,不被子类继承
  11.         public  Fu(String name,int age) {
  12.                 this.name = name;
  13.                 this.age = age;
  14.                 System.out.println("aaaa");
  15.         }
  16. }
  17. class Zi extends Fu {
  18.                 //改正:同上
  19.         public Zi(String name,int age) {
  20.                         //改正:父类没有空参的构造函数时,这时必须调用父类含参的构造函数,父类才能初始化
  21.                             super(name,age);//super语句必须放在第一行
  22.                 //this.name = name;
  23.                 //this.age = age;
  24.                 System.out.println("bbbb");
  25.         }
  26. }
复制代码

作者: 胡志翔    时间: 2013-11-5 23:19
一句话:
                 构造函数没有返回值类型。
作者: 黄炳期    时间: 2013-11-6 09:01
一个小问题,有那么多人给你解答,希望你成为大牛后,也能回来帮助新人




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