就C#当中的继承与多态机制进行了下探索,此处主要根据三个关键字进行探讨:
1. abstract
2. virtual
3. new
针对abstract关键字,是抽象之意。用来限定类时,类中的方法,不能有方法体;用来限定方法时,同样也不能有方法体,并且在子类中除非继续使用抽象方法,否则必须完成方法体。
针对virtual关键字,是虚之意。简单的用法是用来指示类中的方法可以被子类的同名方法覆盖或者共存。覆盖时,子类中使用override关键字。共存时,使用new关键字。
针对new关键字,是新之意。在子类方法中的用法是,用以指示子类中与父类存在的同名方法将在方法表中同父类方法共存,并不覆盖父类的同名方法。这样就达到了多态机制下并非一味覆盖的效果。
我们知道对于类的成员变量来说,存于GC堆内,从低到高,存了所有对象的父类,以及再沿继承线向上的所有类的类成员变量,这样的方式,犹如方法表用new关键字构造时的情况。或者说,方法表中的方法,用new关键字声明的时候,其存在形式,就有如子父类的同名成员变量在GC堆里存在的情况一样。
这里举个简单的例子:Chicken : Bird : Animal
以上三类中都有一个成员变量Type,为他们自己的小写类名;都有一个方法,方法名为showType()。
此时,我们用override, override , virtual 三个关键字来分别声明这三个类中的方法。之后我们得到了如下结果:
Animal chicken1 = new Chicken();
Bird chicken