黑马程序员--面向对象学习---继承和子类实例化过程

---------------------- ASP.Net+Android+IO开发S.Net培训、期待与您交流! ----------------------

1、继承:在子类的构造函数中有默认的super(),调用父类空参数的构造函数,如果要继承,如果重写父类构造函数,最好也重写父类空参构造函数,不然会报错。子类所有的构造函数都会默认调用父类的空参构造函数。如果父类没有空参构造函数,子类必须用super明确掉用父类的构造函数,super语句必须定义在子类构造函数的第一行。用this()调用本类的构造函数,super就没有了,superthis只能定义在第一行,但是子类的构造函数肯定有一个调用父类的构造函数。

2、子类实例化过程:先初始化父类变量,在初始化子类的变量,在通过super初始化父类内容时,子类的成员变量并未显示的初始化,等super()父类初始化完毕后,才进行子类的成员变量显示的初试化

图示:

 

class Fu

{

         Fu()

         {

                   super();

                   show();

                   return;

         }

         void show()

         {

                   System.out.println("fu show");

         }

}

class Zi extends Fu

{

         int num = 8;

         Zi()

         {

                   super();

                   //-->通过super初始化父类内容时,子类的成员变量并未显示初始化。等super()父类初始化完毕后,

                   //才进行子类的成员变量显示初始化。

 

                   System.out.println("zi cons run...."+num);

                   return;

         }

         void show()

         {

                   System.out.println("zi show..."+num);

         }

}

class ExtendsDemo5 

{

         public static void main(String[] args) 

         {

                   Zi z = new Zi();

                   z.show();

         }

}


对象的实例化过程:Person p = new person();

1.              JVM会先读取指定路径下的Person.class文件,并加载进内存,并会先加载Person父类(如果有父类)

2.              在堆内存中开辟空间,分配地址

3.              在对象空间中,对对象中的属性进行默认的初始化

4.              调用对应的构造函数进行初始化

5.              在构造函数中,会先到调用父类中构造函数进行初始化

6.              父类初始化完毕后,在堆栈的属性进行显示初始化

7.              在进行子类构造函数的特定初始化

8.              初始化完毕后,将地址赋给引用变量

class Fu{

         Fu(){

                   show();

         }

         void show(){

                   System.out.println("hahah");

         }

}

 

class Zi extends Fu{

         int num = 3;

         

         {

                   System.out.println("zi" + num);

                   num = 4;

         }

         Zi(){

                   super();

                   //属性显示初始化

                   //构造代码块初始化

                   show();

         }

         void show(){

                   System.out.println("show..." + num);

         }

}

图示:

 

---------------------- ASP.Net+Android+IO开发S.Net培训、期待与您交流! ----------------------
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值