c# 类对像的实例化的问题

来源:百度知道 编辑:UC知道 时间:2024/05/30 07:10:54
c#有如下代码:
class A
{
public void F()
{
Console.WriteLine("A.F");
}
public virtual void G()
{
Console.WriteLine("A.G");
}
}
class B:A
{
new public void F()
{
Console.WriteLine("B.F");
}
public override void G()
{
Console.WriteLine("B.G");
}

}
class Test
{
static void Main()
{
B b=new B();
A a=b;
a.F();
b.F();
a.G();
b.G();
}
}
想问一下,
A a=b;
这行代码是否等价于:
A a= new A();
a=b;
为什么会这样,能详细的解释一下吗?

A a=b; 等于A a = (A)b;
也就是把b做隐式类型转换,从B类型到A类型。子类可以隐式转换为父类,这是面向对象语言的特性。

面向对象的特性之一就是继承性,你代码里的类A和类B是继承关系,类A是类B的父类,我们在进行类实例化时,如果要将子类转换为父类的类型,则要用到强类型转换,正如A a=b; 相当于A a = (A)b;

因为B是A的一个子类,它继承A的所有属性包括方法,
A a = b;
用子类对于基类对象进行赋值,当然也就相当于先定义,后再赋值!

我来说详细点吧,首先,类B继承于类A,那么类A是类B的父类,类B具有类A所有的属性和方法,并切可类B可以具有类A所没有的方法,如果类B存在相同于类A的方法,那么这就是说类B重载了父类(类A)的该方法。这就是面向对象中的继承,重载必须是存在继承关系中的子类。说了这么多,希望楼主能明白,希望能带给你帮助!