黑马程序员技术交流社区

标题: 这段代码子类为什么没有继承父类Fu(int x) [打印本页]

作者: 懒羊羊    时间: 2014-10-15 11:53
标题: 这段代码子类为什么没有继承父类Fu(int x)
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);
        }
就是一段废代码了?

请详细讲解下 谢谢了
作者: javaAndroid    时间: 2014-10-15 12:04
1、你的两个类中都只有构造函数。
2、你为父类手动添加了一个无参构造函数
在子类的构造函数中,如果没有手动指定调用父类构造函数的话
那么子类会默认调用父类无参的构造函数
所以new出来的两个Zi类对象,虽然使用的构造函数不同
但是你没有为第二个构造函数手动调用父类构造函数
所以子类有参构造函数还是默认调用父类无参的那个构造函数
如果想要调用父类有参的构造函数
需要在子类有参的构造函数第一行添加super(x);
作者: 懒羊羊    时间: 2014-10-15 12:14
javaAndroid 发表于 2014-10-15 12:04
1、你的两个类中都只有构造函数。
2、你为父类手动添加了一个无参构造函数
在子类的构造函数中,如果没有手 ...

哦哦哦,我知道了,绕进去了。。。
作者: 家进    时间: 2014-10-15 13:40
想要调用 父类的有参构造函数,必须要在子类构造函数里声明呀,因为默认的都是调用父类无参的构造函数

作者: 朱小龙    时间: 2014-10-15 14:50
调用的是子类函数,子类函数只会运用到父类的构造函数
应该是这样的,所以父类中有int的那段话不会被调用到
非要应用的话,需要加入super关键字
作者: 朱小龙    时间: 2014-10-15 14:51
我也是新人....才看完的,说的不对请见谅哦




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