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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 高境 金牌黑马   /  2012-12-19 10:07  /  1397 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 高境 于 2012-12-19 18:08 编辑

class  Demo extends Super
{
        public Demo(String s)
        {
               
                i= 2;
        }
        public static void main(String[] args)
        {
                Demo d = new Demo("yes");
                System.out.println(d.i);
        }
}
class Super
{
         int i= 0;
         public Super(String s)
         {
                 i= 1;
         }
}
为什么编译不能通过?

评分

参与人数 1技术分 +1 收起 理由
古银平 + 1 神马都是浮云

查看全部评分

5 个回复

倒序浏览
public Demo(String s)
        {
                super();//隐式super;
                i= 2;
        }
子类方法中调用隐式super();会找父类中有没有空参的构造函数,父类中没有所以程序未通过编译,修改如下:
class Super
{
         int i= 0;
         /*
         public Super(){
                 
         }
         */
         public Super(String s)
         {
                 i= 1;
         }
}

评分

参与人数 1技术分 +1 收起 理由
古银平 + 1 神马都是浮云

查看全部评分

回复 使用道具 举报
凊係柈泩 发表于 2012-12-19 10:29
public Demo(String s)
        {
                super();//隐式super;

那也可以在子类中手动的调用指定的父类构造函数的吧?
回复 使用道具 举报
可以的,您可以改成
public Demo(String s)
        {
                super(s);
                i= 2;
        }

只是你这个代码为什么构造函数传进去的是String?你的成员只有一个   int i= 0;
回复 使用道具 举报
public Demo(String s)
        {      super(s);       //默认调用父类的构造方法
               
                i= 2;
        }

在子父类的继承关系中虽然子类继承了父类的非私有方法,但是不能够继承构造方法,但是没有父类就不会有子类的,这里就隐含了super()方法,调用父类的构造方法
回复 使用道具 举报
子类默认调用父类的无参构造器,你这里父类的无参构造器没有写,修改有2中方法,一个是在子类中调用父类的有参构造器,还有一个就是给父类添加一个有参构造器,个人建议你使用第二种方法,给父类添加一个无参构造器。
注意:一般的编程习惯似乎都是加无参构造器的,不管你用不用。这样就可以预防你继承的时候出现很多不可预知的问题。记得老师的视频中有讲到的。
关于继承的视频:推荐看老师的day08的视频。里面讲的比较详细!个人意见,仅供参考!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马