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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 磊弟哥哥 中级黑马   /  2014-9-14 16:52  /  990 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

/*
子父类构造函数
构造函数没有覆盖,因为构造函数名与类名一致,而不同的类类名不同



为什么子类一定要访问父类中的构造函数
因为父类中的数据子类可以直接获得,所以对象建立时,需要先查看父类是如何对这些数据初始化的
所以子类在对象初始化时,要先访问父类中的构造函数
如果要访问父类中的指定的构造函数,可以通过手动定义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");
        }
}

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马