您的位置:首页 > 编程语言 > C#

C#学习第十一天 实现多态:虚方法、抽象类

2015-05-04 20:41 295 查看
一、面向对象基础之多态

面向对象里最高级的一个特征!

概念:让一个对象能够表现出多种状态(类型)

有多个类继承自同一个类,同名的方法中功能却不同,如果要写的话,要单独每一个写一下

Chinese cn1 = new Chinese("韩梅梅");
Chinese cn2 = new Chinese("李雷");
Japanese j1 = new Japanese("树下君");
Japanese j2 = new Japanese("井边子");
Korea k1 = new Korea("金秀贤");
Korea k2 = new Korea("金贤秀");
American a1 = new American("科比");
American a2 = new American("奥尼尔");
Person[] pers = {cn1,cn2,j1,j2,k1,k2,a1,a2};
for(int i=0;i<pers.Length;i++)
{
//				if(pers[i] is Chinese)
//					((Chinese)pers[i]).SayHello();
//				if(pers[i] is Japanese)
//					((Japanese)pers[i]).SayHello();
//				if(pers[i] is Korea)
//					((Korea)pers[i]).SayHello();
//				if(pers[i] is American)
//					((American)pers[i]).SayHello();

//是否可以简化以上代码,使用一个对象表象出多种类型,用一个对象完成上述功能
pers[i].SayHello();


实现多态的3种手段:

1、虚方法;  

1)第一步:将父类的方法标记为虚方法,使用关键字---virtual,说明这个方法可以被重写(这个函数也可以被调用,也可以实现功能)

public virtual void <span style="font-family: Arial, Helvetica, sans-serif;">SayHello</span>()


2)第二步:在子类的此同名方法使用关键字----override,重写这个方法

public override void <span style="font-family: Arial, Helvetica, sans-serif;">SayHello</span>()


pers[i].SayHello();


就会自动调用相应的子类的方法,多种输出

2、抽象类;

当父类中的方法不知道如何去实现的时候,可以考虑将父类写成“抽象类”,将父类的方法写成抽象方法,用关键字:abstract

public abstract class Animal
{
public abstract void Bark(); //抽象方法---没有方法体: 存在的意义就是让方法重写,来实现多态
}
子类重写也是用关键字override

抽象类不能创建对象,只能创建子类的对象

Animal a = new Dog();
具体调用哪个方法取决于创建哪个子类的对象

要注意的地方:

1)抽象类的抽象成员,必须是抽象的,不能有任何实现,并且子类必须重写;

2)抽象类可以有非抽象成员,子类能继承并且不需要重写 

3)抽象类不能实例化(不能创建对象)

4)子类必须重写父类的所有抽象类,除非子类也是抽象类

5)子类重写抽象方法时,参数和返回值必须一一对应(一样)

如果父类中的方法有默认的实现,并且父类需要实例化(创建对象),这种多态用”虚方法“实现,父类定义成普通类

如果父类中的方法不需要默认的实现,并且不需要实例化(创建对象),这种多态就用”抽象类“来实现,把父类定义成抽象类
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐