黑马程序员技术交流社区

标题: 子父类构造函数特点 [打印本页]

作者: 磊弟哥哥    时间: 2014-9-14 16:52
标题: 子父类构造函数特点
/*
子父类构造函数
构造函数没有覆盖,因为构造函数名与类名一致,而不同的类类名不同



为什么子类一定要访问父类中的构造函数
因为父类中的数据子类可以直接获得,所以对象建立时,需要先查看父类是如何对这些数据初始化的
所以子类在对象初始化时,要先访问父类中的构造函数
如果要访问父类中的指定的构造函数,可以通过手动定义super语句的方式指定



super一定要定义在子类构造函数第一行

结论
子类中所有构造函数默认都会访问父类中的空参数构造函数
因为子类每一个构造函数第一行都有一句隐式super();

当父类没有空参数构造函数时(定义了有参数构造函数),子类必须手动通过super语句形式来指定要访问父类中的构造函数

当然:子类的构造函数第一行也可以手动指定this语句访问本类中构造函数
子类中至少会有一个构造函数访问父类中的构造函数
*/
class Demo
{
        public static void main(String []args)
        {
                Zi z= new Zi();
                Zii zi=new Zii(4);
                Ziii zii=new Ziii();
        }
}
class Fu
{
        Fu()//构造函数在对象一建立就执行
        {
                System.out.println("fu run");
        }
}
class Zi extends Fu
{
        Zi()
        {
                //super(); // 默认隐式语句 不写的话虚拟机帮忙加上。 表示调用父类空参数构造函数
                System.out.println("zi run");
        }
}
class Fuu
{
        Fuu()
        {
                System.out.println("fuu run");
        }
}
class Zii extends Fuu
{
        /*
        还是先访问父类中的空参数构造函数
        */
        Zii(int x)
        {
                System.out.println("zii run");
        }
}
class Fuuu
{
        Fuuu(int x)
        {
                System.out.println("fuuu run");
        }
}
class Ziii extends Fuuu
{
        Ziii()
        {
                super(4);//访问父类中的有参数的构造函数,需要指定
                System.out.println("ziii run");
        }
}




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