using System;
using System.Collections.Generic;
using System.Text;namespace Test1
{
class A
{
public void F()
{
Console.WriteLine("A.F");
}
public virtual void G()
{
Console.WriteLine("A.G");
}
}
class B : A
{
new public void F() //基类的方法被派生类隐藏(New),
{
Console.WriteLine("B.F");
}
public override void G()
{
Console.WriteLine("B.G");
}
}
class Test
{
static void Main(string[] args)
{
B b = new B();
A a = new A();
a.F();
b.F();
a.G();
b.G();
a = b;
a.F();
b.F();
a.G();
b.G();
}
}
}以下是B类中一段代码 new public void F()
{
Console.WriteLine("B.F");
}
如果把上面的一段改为public void F()
{
Console.WriteLine("B.F");
}
运行结果还是一样
A.FB.FA.GB.G
A.F
B.F
B.G
B.G
有谁能给我解释其中的原因吗
using System.Collections.Generic;
using System.Text;namespace Test1
{
class A
{
public void F()
{
Console.WriteLine("A.F");
}
public virtual void G()
{
Console.WriteLine("A.G");
}
}
class B : A
{
new public void F() //基类的方法被派生类隐藏(New),
{
Console.WriteLine("B.F");
}
public override void G()
{
Console.WriteLine("B.G");
}
}
class Test
{
static void Main(string[] args)
{
B b = new B();
A a = new A();
a.F();
b.F();
a.G();
b.G();
a = b;
a.F();
b.F();
a.G();
b.G();
}
}
}以下是B类中一段代码 new public void F()
{
Console.WriteLine("B.F");
}
如果把上面的一段改为public void F()
{
Console.WriteLine("B.F");
}
运行结果还是一样
A.FB.FA.GB.G
A.F
B.F
B.G
B.G
有谁能给我解释其中的原因吗
所谓隐藏,就是指
B b = new B();
A a = new A();
a = b;
或者
A a = new B();
这时候无论制定a是A类型还是B类型,都去调用B类型的方法(B类型中的方法“替换”了A类型中同名方法),失去了多态性。