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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 冯国强 中级黑马   /  2013-12-14 17:24  /  1249 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

class J_SubClass extends J_Test
{}
public class J_Test{
   J_Test(int i)
  {
     System.out.println(i);
  }
  public static void main()
  {
     j_SubClass a=new J_SubClass();
  }
}
这里是哪错了,为什么?

评分

参与人数 1黑马币 +5 收起 理由
乔兵 + 5

查看全部评分

6 个回复

倒序浏览
当出现有参的构造函数后,默认无参的就没有了。
解决方案一:指定super(5)
  1. class J_SubClass extends J_Test
  2. {

  3.         J_SubClass() {
  4.                 super(5);       
  5.         }
  6.        
  7. }
  8. public class J_Test
  9. {
  10.    J_Test(int i)
  11.   {
  12.      System.out.println(i);
  13.   }
  14.   public static void main()
  15.   {
  16.      J_SubClass a = new J_SubClass();
  17.   }
  18. }
复制代码
解决方案二:J_Test加一个默认无参的构造 函数

  1. class J_SubClass extends J_Test
  2. {
  3.        
  4. }
  5. public class J_Test
  6. {
  7.         J_Test(){};
  8.    J_Test(int i)
  9.   {
  10.      System.out.println(i);
  11.   }
  12.   public static void main()
  13.   {
  14.      J_SubClass a = new J_SubClass();
  15.   }
  16. }
复制代码






评分

参与人数 1技术分 +1 收起 理由
乔兵 + 1

查看全部评分

回复 使用道具 举报
你继承的J_Test类中没有无参构造,因为你本身已经提供了一个有参数的构造,而在实例化J_SubClass()时执行默认的无参构造,同时此时的无参构造会自动继承父类(super)的,而此时就报错了。

评分

参与人数 1技术分 +1 收起 理由
乔兵 + 1

查看全部评分

回复 使用道具 举报
前提知识:子类对象建立时,会调用子类的构造函数,而子类的构造函数会调用父类的构造函数(子类对象的初始化当然要参考父类对象的初始化)代码修改如下:
class J_SubClass extends J_Test
{      /*
    默认的构造函数为     J_Subclass()
      {
          //super();这句话是隐藏了,其作用是调用父类的构造函数。若是父类中的构造函数为显示的有参数i,那么就应该将参数传过去:super(3);我的代码则是将i给删掉~
       }
    */     
}
class J_Test{
   J_Test()//去掉参数
  {
     System.out.println("haha~~~");//为了方便程序运行,改成输出haha~~~;
  }
  public static void main(String[] args)
  {
     J_SubClass a=new J_SubClass();//将j改成J
  }
}



评分

参与人数 1技术分 +1 收起 理由
乔兵 + 1

查看全部评分

回复 使用道具 举报
在创建一个对象时这个对象会自动调用构造函数,你这里的子类没有一个带参数的构造函数,所以这里就会调用子类的默认无参构造函数,自然就会调用父类的无参构造函数,但是你是申明了一个有参的构造函数,所以会报错,如果你在子类的构造函数里面使用super(),就可以调用父类的构造函数。

评分

参与人数 1技术分 +1 收起 理由
简★零度 + 1

查看全部评分

回复 使用道具 举报
定义了有参构造 之后 必须写出午餐构造  要不就没有无参构造了

没有无参构造了 肯定不对了 new不出来
回复 使用道具 举报
class J_SubClass extends J_Test
{

        J_SubClass(int i) {
                super(i);
               
        }
       

}


public class J_Test{
        J_Test(int i)
    {
     System.out.println(i);
    }
       
  public static void main()
  {
     J_SubClass a= new J_SubClass(0);
  }
}

这样的代码才在eclipse中不报错,但是在命令行里 依然报错 。。
首先 父类中J_Test中的主函数里 new 子类 J_SubClass 让人不能理解。。。应该是父类先出现 然后新建一个类中 去调用其他两个类 而不是把主函数 设置其中 。。其次是   构造函数 要用 super 关键字 。。

评分

参与人数 1技术分 +1 收起 理由
简★零度 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马