黑马程序员技术交流社区

标题: 代码找错! [打印本页]

作者: 芦曦    时间: 2012-9-4 04:23
标题: 代码找错!
本帖最后由 芦曦 于 2012-9-4 16:10 编辑
  1. class Test
  2. {
  3.         public static void main(String[] args)
  4.         {
  5.                 Per p =new Per("haha",5);
  6.                 p.show();
  7.         }
  8. }
  9. class Chi extends Per
  10. {
  11.         
  12. }
  13. class Per
  14. {
  15.         private String name;
  16.         private int age;
  17.         Per(String name,int age)
  18.         {
  19.                 this.name=name;
  20.                 this.age =age;
  21.         }
  22.         void show()
  23.         {
  24.                 System.out.println(this.name+"....."+this.age);        
  25.         }
  26. }
复制代码
大家帮我看看这段代码哪有问题哈!!!!
作者: 武庆东    时间: 2012-9-4 07:03
    class Test
    {
            public static void main(String[] args)
            {
                    Per p =new Per("haha",5);
                    p.show();
            }
    }
    class Chi extends Per
    {
/*问题出现在这里,如果不显示调用父类的有参构造函数,系统会默认调用父类的无参构造函数super(),但是父类中没有无参构造函数,那它就不能调用,所以编译就无法通过!
可以为父类添加一个无参构造函数,或者显示调用父类的有参构造函数!
*/
            
    }
    class Per
    {
            private String name;
            private int age;
            Per(String name,int age)
            {
                    this.name=name;
                    this.age =age;
            }
            void show()
            {
                    System.out.println(this.name+"....."+this.age);     
            }
    }

作者: 郑世光    时间: 2012-9-4 07:04
你的父类Per的构造函数是Per(String name,int age),是有2个参数的。
在你的子类Chi中,你没有写构造函数,默认的是:Chi () {   super()  }
你要注意的是子类构造函数都会隐式地调用父类的构造函数:super()。但是你的父类中没有无参数的构造函数。修改方法:
1) 在父类中定义无参数构造方法Per(){}
2) 在子类的构造函数中指明要调用的父类构造函数是Per(String name,int age)。



作者: 张飞年    时间: 2012-9-4 11:13
本帖最后由 张飞年 于 2012-9-4 11:16 编辑
  1. 09.class Chi extends Per{

  2. 10.{
复制代码
很简单,只是一个细节问题:
这里的子类Chi继承父类时,需要先初始化父类,初始化默认调用父类Per的无参构造函数--super()--Per(){...}  ,而父类中只是一个有参构造函数,(当构造函数有参数时,无参的构造函数会省略,也就是说无参构造函数是一个“最低生活保障”,无则加,有则无)。
可以这样改正:

  1. class Chi extends Per{
  2.   super(n,m);
  3. }
  4. //或者:
  5. class Per{
  6.     private String name;
  7.     private int age;
  8.     Per(){//这里加个空构造函数即可
  9.     }
  10.     Per(String name,int age){
  11.     this.name=name;
  12.     this.age=age;
  13.    }
复制代码





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