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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 王德升 于 2012-6-3 23:15 编辑

class Fu
{
        Fu()
        {
                num = 33;
                System.out.println("fu run");
        }
        Fu(int  x)
        {
                System.out.println("fu ..."+x);
        }
        
}

class Zi extends Fu
{
        Zi()
        {
                System.out.println("zi run");
        }
        Zi(int x)
        {
                System.out.println("zi..."+x);
        }
}

class  ExtendsDemo
{
        public static void main(String[] args)
        {
                Zi z = new Zi(0);
                System.out.println(z.num);
        }
}

毕老师说道Zi类中会有隐藏的super,还有this(因为new了对象,this代表对象),
因为都是构造函数,就算不调用也会先访问父类,因为有super先默认初始化父类,
麻烦大家给我说说这其中到底是怎么一回事?

3 个回复

倒序浏览
子类继承父类,那么他的属性和普通方法,构造方法都会被继承.即使没有super 也会先调用父类的构造函数  super关键字用来显示的调用子类的方法。
回复 使用道具 举报
子类中所有的构造函数默认都会访问父类中空参数的构造函数
因为每一个构造函数的第一行都有一条默认的语句super();
子类会具备父类中的数据,所以要先明确父类是如何对这些数据初始化的。
当父类中没有空参数的构造函数时,子类的构造函数必须通过this或者super语句指定要访问的构造函数。
回复 使用道具 举报
class Fu
{
        Fu()       //父类构造函数1
        {
                num = 33;
                System.out.println("fu run");
        }
        Fu(int  x)        //父类构造函数2
        {
                System.out.println("fu ..."+x);
        }
        
}

class Zi extends Fu
{
          super();     //子类在例化的时候先调用,父类的构造方法即super()就代表  显示调用父类的构造方法
                       //super先默认初始化父类,这是因为由于子类要继承父类的属性和方法,所以要先实例化父类对象才能继承

        Zi()        //子类构造函数1
        {
                System.out.println("zi run");
        }
        Zi(int x)   //子类构造函数2
        {
                System.out.println("zi..."+x);
        }
}

class  ExtendsDemo
{
        public static void main(String[] args)
        {
                Zi z = new Zi(0);
                Syste实例化m.out.println(z.num);
        }
}


回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马