您的位置:首页 > 编程语言 > C#

小例子分析C#继承机制

2006-02-22 22:40 411 查看
using System;

class test
{
public class A
{
public virtual void fun1(int i)
{
Console.WriteLine(i);
}
public void fun2(A a)
{
a.fun1(3);
fun1(7);
}
}

public class B : A
{
public override void fun1(int i)
{
Console.WriteLine(i+1);
}
}

public static void Main()
{
A a = new A();
B b = new B();
a.fun2(b);
b.fun2(a);
}
}

上面的程序里,类B继承了类A,并在Main()函数里分别产生了这两个类的实例变量a,b

a.fun2(b);
是如下执行的:
1. 对象a首先调用A类的fun2方法,fun2(A a)需要的是一个A类型的实例变量,而这里的
实际参数却是B类型的实例变量b。所以这里会隐式的将b转化成A类型,转化过程中,
b将丢失掉自己独有特性。
2. 执行b.fun1(3),b的fun1方法覆盖掉了A类的fun1方法,故这里实际执行B类的fun1
方法,打印出4(i+1)。
3. 执行fun1(7),这里没有指明调用对象,默认为当前调用对象。当前是a在调用,则执行
a.fun1(7),a是A类的实例变量,则执行A类的fun1,打印出7(i)。

b.fun2(a);
是如下执行的:
1. 由于B类中并没有fun2方法,则执行其父类A的fun2方法,这里实际参数是一个A类型的实例
变量a,故不需要做任何转换。
2. 执行a.fun1(3),打印出3(i)。
3. 执行fun1(7),即b.fun1(7),打印出8(i+1)。

程序最后的输出应该是:
4
7
3
8
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: