class A
{
public f(){}
}
class B:A
{
public f(){}
}
class Show
{
static void Main()
{
A a=new B();
a.f();
}
}大家知道会调用A类的方法。在JAVA中这是多态,会调用B类的方法,.NET中非得要在两个函数上加关键字才能表示多态,才会调用B类方法,但不做改动时候,.NET又支持这种写法,难道仅仅是为了不实列化A类对象?有什么用吗?
{
public f(){}
}
class B:A
{
public f(){}
}
class Show
{
static void Main()
{
A a=new B();
a.f();
}
}大家知道会调用A类的方法。在JAVA中这是多态,会调用B类的方法,.NET中非得要在两个函数上加关键字才能表示多态,才会调用B类方法,但不做改动时候,.NET又支持这种写法,难道仅仅是为了不实列化A类对象?有什么用吗?
{
public void f()
{
System.Console.WriteLine("A");
}
}class B:A
{
public new void f()
{
System.Console.WriteLine("B");
}
}class Show
{
static void Main()
{
A a = new B();
a.f();
((B)a).f();
}
}/* 程序输出:
A
B因为 a 是 A, 所以 a.f() 调用的是 A 类的方法;
a 转型为 B 后,((B)a).f() 调用的就是 B 类的方法了。
*/
{
virtaul public f(){}
}
class B:A
{
public overrider f(){}
}
{
public virtual void f()
{
System.Console.WriteLine("A");
}
}class B : A
{
public override void f()
{
System.Console.WriteLine("B");
}
}class Show
{
static void Main()
{
(new A()).f();
A a = new B();
a.f();
((B)a).f();
}
}// 请想一下程序的输出是什么?