using System;

class A

{

public A()

{

PrintFields();

}

public virtual void PrintFields(){}

}

class B:A

{

int x=1;

int y;

public B()

{

y=-1;

}

public override void PrintFields()

{

Console.WriteLine("x={0},y={1}",x,y);

}

当使用new B()创建B的实例时,产生什么输出?

答:X=1,Y=0

答案具体解释:

由于构造B之前,先运行变量,y没有明白赋值,默觉得0。运行B的构造函数,由于B继承A。所以先运行A的构造函数。A构造函数调用的PrintFields方法在A类里是虚函数。它的实现是在B类,所以运行B类的PrintFields方法,结果输出。

尽管继续运行完B的构造函数,使y的值是-1.但结果之前已经输出。

1-8代表了new B的时候,程序的运行过程。

class A

    {

        public A()//④

        {

            PrintFields();//⑤,发现被重写→⑥

        }

        public virtual void PrintFields() { }

    }

    class B : A

    {

        int x = 1;//①

        int y;//②

        public B()//③,发现继承了A。立即运行A的构造函数

        {

            y = -1;//⑧,到此。创建对象完成

        }

        public override void PrintFields()//⑥

        {

            Console.WriteLine("x={0},y={1}", x, y);//⑦,输出,此时:x=1,y=0

        }

    }



当程序实例化B时,由于继承关系,,B会先调用其父类的构造方法,,而A的构造中又调用 了 PrintFields 在A中 printFields是虚方法,,所以会调用B中的重写   当调用 PrintFields时 B的构造还未运行,所以y=0而不是-1.所以输出结果是x=1,y=0  假设 B b=new B();b.PrintFields();那么输出结果就是x=1,y=-1

最新文章

  1. robotframework ride安装
  2. java操作数据库出现(][SQLServer 2000 Driver for JDBC]Error establishing socket.)的问题所在即解决办法
  3. yii2.0根据query查看sql语句
  4. Android支付接入(五):机锋网
  5. Java基础知识强化之IO流笔记68:Properties和IO流集合使用
  6. the account is currently locked out. The system administrator can unlock it.
  7. C#与C++的几个不同之处知识点
  8. Hibernate 、多表关联映射 - 多对多关系映射(many-to-many)
  9. bzoj 1042: [HAOI2008]硬币购物 dp+容斥原理
  10. flex控件总结
  11. requestium
  12. react-踩坑记录——iconfont
  13. JDK安装教程(Windows7 x64)
  14. thinkphp标签实现bootsrtap轮播carousel实例
  15. 如何方便的结果ajax使用html5的新type类型
  16. iOS 应用上传所需 Icon图片大小
  17. select的placeholder和分组效果
  18. python 连接sql server数据库的示例代码
  19. Java 二维数组
  20. 自定义实现wcf的用户名密码验证

热门文章

  1. Highcharts Highstock 学习笔记 第一篇 Highcharts配置
  2. RESTful 设计理论
  3. Spring AOP(aspect oriented programming) 转载
  4. CF414B Mashmokh and ACM
  5. CSS——float
  6. servlet的多线程并发问题
  7. Redis系列(一)StackExchange.Redis的使用
  8. 【转载】HTTP 响应头与状态码
  9. C# 获得 当年1月1号
  10. java中一个数组不能放不同数据类型的值