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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 当年张小凡 中级黑马   /  2015-10-14 23:43  /  663 人查看  /  14 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

最近在看毕老师的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明确调用父类中有参数的构造方法,具体是怎么样的,代码怎么写?

有没有大神解惑啊?

14 个回复

倒序浏览
子类构造方法的第一行,要么super调用父类无参构造,要么this调动自己的带参构造,通过此带参构造第一行的super调用父类的无参构造进行初始化
回复 使用道具 举报
运行看左边,编译看右边
回复 使用道具 举报
wx_HWRW5aF7 发表于 2015-10-15 00:55
子类构造方法的第一行,要么super调用父类无参构造,要么this调动自己的带参构造,通过此带参构造第一行的s ...

你好,可以把代码写出来吗?
回复 使用道具 举报
。。。。。。。。。。。
回复 使用道具 举报
话说我现在第一天看视频,下面这个东西一直没看出来是哪里出问题,但是就是编译不出来,错误提示说有非法字符,箭头指向那个小括号{:2_43:}
class Demo
{
           public static void main (string[] args)
          {

}
         
}
回复 使用道具 举报
臭小子 发表于 2015-10-15 11:21
话说我现在第一天看视频,下面这个东西一直没看出来是哪里出问题,但是就是编译不出来,错误提示说有非法字 ...

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

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

非常感谢,看来我要注意这些细节问题了
回复 使用道具 举报
学习了
回复 使用道具 举报
Meitan 中级黑马 2015-10-15 20:16:59
13#
好厉害啊,我才看到数组就看不下去了,好桑心啊
回复 使用道具 举报
ddsx 初级黑马 2015-10-16 19:48:49
14#
看到面向对象,
回复 使用道具 举报
子类的所有构造函数,默认调用父类的无参构造方法,父类没有写无参构造,所以报错
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马