C#中的疑问

来源:百度知道 编辑:UC知道 时间:2024/06/11 08:10:03
using System;
class Test{
public void F(){
Console.WriteLine("A");
}
}

class B:Test{
new public void F(){
Console.WriteLine("B");
}
}

static void Main(){
Test objA=new B();
objA.F();
}
Test objA=new B();类B继承Test,new B(把地)址传给了父类Test,那么打印出来的是A.为什么不是输出的是B呢?

基类对象(Test)只能使用基类的成员,不能使用派生类(B)的;
基类对象可以是派生类对象的引用,这个是多态性的原理,也是虚函数的原理,这样基类对象可以调用基类的成员和派生类的虚函数;
派生类对象不能是基类的引用。

用Test定义的objA,是不能使用派生类的!
这一点同意楼上的回答。
如果想返回B的结果,要用到((B)objA).F();

普通方法得重写,看他声明类得类型,Test objA=new B();也就是看test那个类型,就调用哪个里面得方法,虚方法得重写看实现类得类型,Test objA=new B();也就是看new B();得类型