黑马程序员技术交流社区

标题: 新人求解。 [打印本页]

作者: 当年张小凡    时间: 2015-10-14 23:43
标题: 新人求解。
最近在看毕老师的JAVA入门视频。
其中有一题是这样的。

//14.写出程序结果  
class  Super1{  
    int i=0;  
    public Super1(String s){  
        i=1;  
    }  
}  
class Demo2 extends Super1{  
    public Demo2(String s){  
        i=2;  
    }  
    public static void main(String [] args){  
        Demo2 d=new Demo2("yes");  
        System.out.println(d.i);  
    }  
    //结果 :编译失败 ,因为父类中缺少空参数的构造函数Super1(){}, 或者子类中 通过super明确调用父类中有参数的构造方法.  
      
}  

虽然上面写了答案,但还是没怎么看懂。
父类中没有定义空参数的构造函数,java不是会自己加上去吗?
为什么父类中有了空参数构造函数就可以调用d.i,并且打印出2呢?
子类中通过super明确调用父类中有参数的构造方法,具体是怎么样的,代码怎么写?

有没有大神解惑啊?
作者: wx_HWRW5aF7    时间: 2015-10-15 00:55
子类构造方法的第一行,要么super调用父类无参构造,要么this调动自己的带参构造,通过此带参构造第一行的super调用父类的无参构造进行初始化
作者: wx_HWRW5aF7    时间: 2015-10-15 00:57
运行看左边,编译看右边
作者: 当年张小凡    时间: 2015-10-15 10:38
wx_HWRW5aF7 发表于 2015-10-15 00:55
子类构造方法的第一行,要么super调用父类无参构造,要么this调动自己的带参构造,通过此带参构造第一行的s ...

你好,可以把代码写出来吗?
作者: LLLLL    时间: 2015-10-15 11:08
。。。。。。。。。。。
作者: 臭小子    时间: 2015-10-15 11:21
话说我现在第一天看视频,下面这个东西一直没看出来是哪里出问题,但是就是编译不出来,错误提示说有非法字符,箭头指向那个小括号{:2_43:}
class Demo
{
           public static void main (string[] args)
          {

}
         
}
作者: 当年张小凡    时间: 2015-10-15 11:58
臭小子 发表于 2015-10-15 11:21
话说我现在第一天看视频,下面这个东西一直没看出来是哪里出问题,但是就是编译不出来,错误提示说有非法字 ...

public static void main(String[] args)
你的(String[] args)  S要大写, 还有你的小括号要用英文输入法,你这句话里最后一个小括号是用中文输入法写的,中文输入法的小括号是错的。
作者: 李金龙2015    时间: 2015-10-15 12:40
1. 父类中出现了有参的构造方法,java就不会再默认给出空参构造了
2. 给出了就会完成初始化,子类后初始化,所以就是2
3. public Demo2(String s){  
        super(s);
        i=2;  
    }  
你看这样写是否可以
作者: 当年张小凡    时间: 2015-10-15 13:14
李金龙2015 发表于 2015-10-15 12:40
1. 父类中出现了有参的构造方法,java就不会再默认给出空参构造了
2. 给出了就会完成初始化,子类后初始化 ...

谢谢,你的回答很好。看构造函数视频的时候,我可能还没理解透。看来还得回去复习下。
作者: itheima_casper    时间: 2015-10-15 13:53
自定义了构造函数,系统就不会自己加空构造函数啦
作者: 臭小子    时间: 2015-10-15 17:04
当年张小凡 发表于 2015-10-15 11:58
public static void main(String[] args)
你的(String[] args)  S要大写, 还有你的小括号要用英文输入 ...

非常感谢,看来我要注意这些细节问题了
作者: fwqk123    时间: 2015-10-15 17:26
学习了
作者: Meitan    时间: 2015-10-15 20:16
好厉害啊,我才看到数组就看不下去了,好桑心啊
作者: ddsx    时间: 2015-10-16 19:48
看到面向对象,
作者: toypaoa    时间: 2015-10-16 20:36
子类的所有构造函数,默认调用父类的无参构造方法,父类没有写无参构造,所以报错




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