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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

class Fu{
        Fu()
        {
                System.out.println("fu1");
        }
        Fu(int x)
        {
                System.out.println("fu..."+x);
        }
       
}
class Zi extends Fu
{
        Zi()
        {
                System.out.println("zi1");

        }
        Zi(int x)
        {
                System.out.println("zi..."+x);
        }
}


class ExtendsDemo
{
        public static void main(String[] args)
        {
                Zi z=new Zi();
                Zi z1=new Zi(2);
}
}

输出结果是
fu1
zi1
fu1
zi...2

根据继承特性子类class Zi应该继承了父类里的Fu(int x);  函数,但是输出结果为什么没有
fu...2呢?

这样
Fu(int x)
        {
                System.out.println("fu..."+x);
        }
就是一段废代码了?

请详细讲解下 谢谢了

评分

参与人数 1技术分 +1 收起 理由
杨佳名 + 1 加油!

查看全部评分

5 个回复

倒序浏览
1、你的两个类中都只有构造函数。
2、你为父类手动添加了一个无参构造函数
在子类的构造函数中,如果没有手动指定调用父类构造函数的话
那么子类会默认调用父类无参的构造函数
所以new出来的两个Zi类对象,虽然使用的构造函数不同
但是你没有为第二个构造函数手动调用父类构造函数
所以子类有参构造函数还是默认调用父类无参的那个构造函数
如果想要调用父类有参的构造函数
需要在子类有参的构造函数第一行添加super(x);

评分

参与人数 1技术分 +1 收起 理由
杨佳名 + 1 赞一个!

查看全部评分

回复 使用道具 举报
javaAndroid 发表于 2014-10-15 12:04
1、你的两个类中都只有构造函数。
2、你为父类手动添加了一个无参构造函数
在子类的构造函数中,如果没有手 ...

哦哦哦,我知道了,绕进去了。。。
回复 使用道具 举报
想要调用 父类的有参构造函数,必须要在子类构造函数里声明呀,因为默认的都是调用父类无参的构造函数
回复 使用道具 举报
调用的是子类函数,子类函数只会运用到父类的构造函数
应该是这样的,所以父类中有int的那段话不会被调用到
非要应用的话,需要加入super关键字
回复 使用道具 举报
我也是新人....才看完的,说的不对请见谅哦
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马