zoukankan      html  css  js  c++  java
  • 派生类构造函数 创建顺序(阿里笔试题)

    派生类 与基类的关系:

    (1)创建构造函数的顺序 :基类构造函数(注意此处基类的成员不能初始化) ==>派生类成员初始化 ==>派生类构造函数

    (2)派生类的构造函数 中 基类的构造函数默认在第一条,如果不写super(),则默认在第一条,注意位置不能颠倒

    (3)派生类可以继承全部的基类的构造函数

    阿里笔试题 举个栗子:

     1 package com.test;
     2 
     3 public  class DispatchTest {
     4     
     5     public static void main(String[] args) {
     6         // TODO Auto-generated method stub
     7          Base b=null; //此处如果 换成 Sub b=null,则b.x=40;不再是20
     8          b=new Sub();
     9          System.out.println(b.x);
    10     }
    11     
    12     static class Base {
    13       
    14       int x =10;
    15       
    16       public Base(){
    17          this.printMessage();
    18          x=20;
    19       }
    20       
    21       public void printMessage(){
    22           System.out.println("Base.x="+x);
    23       }
    24       
    25   }
    26   
    27   static class Sub extends Base{
    28       
    29       int x =30;      
    30       public Sub(){
    31           super();//此处的super();去掉也可以,默认执行super(); 而且只能在构造函数的第一行,如果放在其他行,编译错误,
    32           this.printMessage();
    33           x=40;
    34           
    35       }
    36       
    37       public void printMessage(){
    38           System.out.println("Sub.x="+x);
    39       }
    40   } 
    41 
    42 }

    结果打印为:

    Sub.x=0
    Sub.x=30
    20

    如上分析可以看出  第八行开始初始化 派生类Sub的构造函数,按照刚才的顺序

    首先初始化基类的构造函数(不包含基类成员)因此

    (1)基类的构造函数==>执行 17行,this.printMessage();注意此处的this是派生类,并且派生类的成员还没有初始化,因此x=0;

    打印 Sub.x=0

    (2)执行18行,基类的x =20

    (3)派生类的成员==>执行29行 x=30;

    (4)派生类构造函数==>执行32行;打印 Sub.x=30;

    (5)然后执行9行,注意,此处的Sub属于派生类,包含了两类实例 基类 base b 和 sub b,

    因为第7行强制转化为基类,因此 b.x =20(基类的) 打印 20;

    如果第7行为Sub b,则b.x=40(派生类) 打印 40;

    综上 结果:

    Sub.x=0
    Sub.x=30
    20

    参考:

    http://tieba.baidu.com/p/1453582263

    http://blog.csdn.net/m631521383/article/details/9819241

    http://blog.csdn.net/libaineu2004/article/details/19565229

  • 相关阅读:
    NPM 使用介绍
    tight
    c# 选择排序
    AssetBundle Manager and Example Scenes
    非常棒的轨迹插件Better Trails v1.4.6
    【模型】Toon Dragon
    unity实现3D物体上的事件监听处理
    Alley Bird 跳跳鸟源码
    Unity性能优化 – 脚本篇
    欧拉角与万向节死锁
  • 原文地址:https://www.cnblogs.com/aspirant/p/6881810.html
Copyright © 2011-2022 走看看