黑马程序员技术交流社区
标题:
继承?求解
[打印本页]
作者:
冯国强
时间:
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)
class J_SubClass extends J_Test
{
J_SubClass() {
super(5);
}
}
public class J_Test
{
J_Test(int i)
{
System.out.println(i);
}
public static void main()
{
J_SubClass a = new J_SubClass();
}
}
复制代码
解决方案二:J_Test加一个默认无参的构造 函数
class J_SubClass extends J_Test
{
}
public class J_Test
{
J_Test(){};
J_Test(int i)
{
System.out.println(i);
}
public static void main()
{
J_SubClass a = new J_SubClass();
}
}
复制代码
作者:
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