黑马程序员技术交流社区

标题: 继承?求解 [打印本页]

作者: 冯国强    时间: 2013-12-14 17:24
标题: 继承?求解
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();
  }
}
这里是哪错了,为什么?

作者: 谢文斌    时间: 2013-12-14 17:44
当出现有参的构造函数后,默认无参的就没有了。
解决方案一:指定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. }
复制代码







作者: kun1990    时间: 2013-12-14 17:48
你继承的J_Test类中没有无参构造,因为你本身已经提供了一个有参数的构造,而在实例化J_SubClass()时执行默认的无参构造,同时此时的无参构造会自动继承父类(super)的,而此时就报错了。
作者: 笑脸不在    时间: 2013-12-14 18:09
前提知识:子类对象建立时,会调用子类的构造函数,而子类的构造函数会调用父类的构造函数(子类对象的初始化当然要参考父类对象的初始化)代码修改如下:
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
  }
}




作者: 恩恩    时间: 2013-12-14 19:48
在创建一个对象时这个对象会自动调用构造函数,你这里的子类没有一个带参数的构造函数,所以这里就会调用子类的默认无参构造函数,自然就会调用父类的无参构造函数,但是你是申明了一个有参的构造函数,所以会报错,如果你在子类的构造函数里面使用super(),就可以调用父类的构造函数。
作者: 75100313    时间: 2013-12-16 22:04
定义了有参构造 之后 必须写出午餐构造  要不就没有无参构造了

没有无参构造了 肯定不对了 new不出来
作者: 还记得梦想吗    时间: 2013-12-16 23:26
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 关键字 。。






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