黑马程序员技术交流社区
标题: c#中类的多态是怎么实现的? [打印本页]
作者: rla540 时间: 2012-12-26 09:27
标题: c#中类的多态是怎么实现的?
c#中类的多态是怎么实现的?virtual和override在背后做了哪些事情?
作者: 王晨 时间: 2012-12-26 09:54
本帖最后由 王晨 于 2012-12-26 10:02 编辑
多态是面向对象思想"三大特征之一,其余两个分别是封装和继承;它是一种机制、一种能力,而非某个关键字。它在类的继承中得以实现,在类的方法调用中得以体现。
通过下面这个例子就很明显看出来了,例如:
- <FONT size=3>public class Animal
- {
- public virtual void Eat()
- {
- Console.WriteLine("Animal eat");
- }
- }
- public class Cat : Animal
- {
- public override void Eat()
- {
- Console.WriteLine("Cat eat");
- }
- }
- public class Dog : Animal
- {
- public override void Eat()
- {
- Console.WriteLine("Dog eat");
- }
- }
- class Tester
- {
- static void Main(string[] args)
- {
- Animal[] animals = new Animal[3];
- animals[0] = new Animal();
- animals[1] = new Cat();
- animals[2] = new Dog();
- for (int i = 0; i < 3; i++)
- {
- animals[i].Eat();
- }
- }
- }</FONT>
复制代码 virtual 关键字用于修饰方法、属性、索引器或事件声明,并使它们可以在派生类中被重写;默认情况下,方法是非虚拟的。不能重写非虚方法。
virtual 修饰符不能与 static、abstract, private 或 override 修饰符一起使用。
override 方法提供从基类继承的成员的新实现。由 override 声明重写的方法称为重写基方法。重写的基方法必须与 override 方法具有相同的签名。
重写的基方法必须是vitural,override,abstract类型的 ,不能重写非虚方法或是静态方法;所以override不能与vitural,new,static同时使用
作者: 吴伟 时间: 2012-12-26 09:55
实现多态有很多。。。
隐藏基类virtual重写父类override 抽象类抽象方法abstract
几个列子
虚方法
class A
{
public virtual void Fun()
{
Console.WriteLine("A的");
}
}
class B : A
{
public override void Fun()
{
Console.WriteLine("A是虚的");
}
}
抽象方法
abstract class A
{
public abstract void Fun();
}
class B:A
{
public override void Fun()
{
Console.WriteLine("A是抽象的);
}
}
作者: 李冠彬 时间: 2012-12-26 11:40
说简单点就是,多态是子类继承父类时,作了更改,实现“多态”。而virtual,标记父类,说明可以重写。override,标记子类,说明是重写的方法。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) |
黑马程序员IT技术论坛 X3.2 |