using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace test
{
class Program
{
static void Main(string[] args)
{
//第一种情况
A a = new B();//x=1,y=0
a.PrintFields();//x=1,y=-1
//因为构造B之前,先执行变量,y没有明确赋值,默认为0。执行B的构造函数,
//因为B继承A,所以先执行A的构造函数。A构造函数调用的PrintFields方法在A类里是虚函数,它的实现是在B类,
//所以执行B类的PrintFields方法,结果输出。虽然继续执行完B的构造函数,使y的值是-1.但结果之前已经输出
//第二种情况
B b = new B();//x=1,y=0
b.PrintFields();//x=1,y=-1
//因为构造B之前,先执行变量,y没有明确赋值,默认为0。执行B的构造函数,因为B继承A,所以先执行A的构造函数。
//A构造函数调用的PrintFields方法在A类里是虚函数,它的实现是在B类,所以执行B类的PrintFields方法,结果输出。
//虽然继续执行完B的构造函数,使y的值是-1.但结果之前已经输出
//第三种情况
A c = new A();
c.PrintFields();//什么都不输出
Console.ReadKey();
}
}
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);
}
}
}
有关继承的典型例子
最新推荐文章于 2020-06-10 22:46:56 发布