Jim*_*imZ 0 c# subclass abstract
问题是:有两个类,A和B.
public abstract class A
{
public A()
{
Console.WriteLine("A");
}
public virtual void Fun()
{
Console.WriteLine("A.Fun()");
}
}
public class B : A
{
public B()
{
Console.WriteLine("B");
}
public new void Fun()
{
Console.WriteLine("B.Fun()");
}
}
Run Code Online (Sandbox Code Playgroud)
如果运行:
public void Main()
{
A a = new B();
a.Fun();
}
Run Code Online (Sandbox Code Playgroud)
输出是:
A
B
A.Fun()
Run Code Online (Sandbox Code Playgroud)
如何解释这个结果,我知道它与抽象和成功有关,但我不知道如何解释.请帮忙.
您需要区分new和override:
new:这并没有 覆盖或触摸继承的基方法.B标记为的方法new仅在您在类型B(例如((B)a).Fun())对象上调用时调用,但在调用B映射到类型对象的类型实例时不调用A.可以在任何方法上使用(即"隐藏基本方法").override确实触及了继承,并且基本功能确实被覆盖了.a.Func()将调用中定义的方法B.只能用于标记为的基本方法virtual.