C# class继承问题

来源:百度知道 编辑:UC知道 时间:2024/06/27 07:04:03
using System;

class Base
{
public void FuncA()
{
Console.WriteLine("Base.FuncA");
}

public virtual void FuncB()
{
Console.WriteLine("Base.FuncB");
}
}

class Derived : Base
{
new public void FuncA()
{
Console.WriteLine("Derived.FuncA");
}
public override void FuncB()
{
Console.WriteLine("Derived.FuncB");
}
}

class Together
{
public static void Main()
{
Derived DerA = new Derived();
DerA.FuncA();
DerA.FuncB();

Base BasA = DerA; //问题

BasA .FuncA();
BasA .FuncB();
}
}

程序运行结果如下:

Drived.FuncA

1,这个有点像强制类型转换,因为Derived继承了Base,所以Derived里边有Base的所有特征,Base BasA = DerA就等于把DerA强制转换成了Base 类型
2,但因为在Derived里用了new关键字,表明了这个是他自己的FuncA(),而override只是重写了FuncB()
4,BasA仍然只有自己定义的属性和方法,恰恰DerA有两个类所有的特性
5,override 是重写,new声明为新的

1.是把DerA的地址值给BasA,就类似一个指针,赋值只是让BasA指向DerA的地址。
2.BasA所指向的对象是DerA。现在指向BasA .FuncA(); 和 BasA .FuncB(); 就等于执行DerA.FuncA(),DerA.FuncB(); 。
3.没有内存空间。DerA的基类是(Base)DerA本身就具有基类的特性
4.virtual-override 可以虚方法-重写。new是不知道原来方法实现的什么,覆盖掉原来的方法。