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() ");
}
public static void Main()
{
A a = new B();
a.Fun();
}
}
这段程序A a = new B(); 怎么理解呢?
执行顺序是:
先执行基类a的构造涵数,在来执行子类的构造涵数
------解决方案--------------------------------------------------------
A a = new B();
先实例化一个类B的对象,然后隐式类型转换为类A的对象,相当于
B b=new B();
A a=b;
------解决方案--------------------------------------------------------
执行结果如下:
A
B
A.Fun()
先A后B,即先父后子。
------解决方案--------------------------------------------------------
多态性. 就好比所有的类派生与object
------解决方案--------------------------------------------------------
凡是基类可以出现的地方,子类必然可以代替基类出现.
针对抽象编程.....
楼主找本设计模式书看看,就明白为什么有这样的表达了.
------解决方案--------------------------------------------------------
应该是这句执行吧
Console.WriteLine( "B.Fun() ");
------解决方案--------------------------------------------------------
这是纯玩概念了.
这段程序A a = new B(); 怎么理解呢?
---------------
是把B当成A来使用了.这样可能会丢失了B的特有的性质,比如用New声明的成员将不起作用!