C#多态前奏
来源:互联网 发布:em算法 python代码 编辑:程序博客网 时间:2024/06/05 08:35
“龙生蛇,凤生鸡,老鼠的儿子会吃鸡”,这是自然界中的变异法则在起作用,面向对象语言借用了变异的思想方法,从而实现了多态性。
同一操作,作用于不同的对象,可以有不同的解释,从而产生不同的执行结果,这就是多态性,也可以说是同一个类型的实例调用相同的方法,产生的结果是不同的。C#多态性涉及到了重载、重写、虚方法、抽象方法和隐藏方法,因此先对这些概念进行简单总结。
(一、)重载(overload)
在同一作用域的两个或多个方法函数名相同,参数列表不同的方法叫做重载。
重载的三个特点:
1、方法名必须相同
2、参数列表必须不相同
3、返回值类型可以不相同
public static int AddNumber(int num1, int num2) { return num1 + num2; } public static double AddNumber(double num1, double num2) { return num1 + num2; }(二、)重写(override)
子类中为满足自己的需要来重复定义某个方法的不同实现,需要用override关键字,被重写的方法必须是虚方法,用的是virtual关键字。
重写的特点是方法名、参数列表、返回值都相同。
//父类 public virtual void EatFood() { Console.WriteLine("Animal吃东西"); }//子类public override void EatFood() { Console.WriteLine("Cat吃东西"); }(三、)虚方法
虚方法即为基类中定义的允许在派生类中重写的方法,使用virtual关键字定义。
public virtual void EatFood() { Console.WriteLine("Animal吃东西"); }虚方法调用
Animal A = new Animal(); A.EatFood();(四、)抽象方法
在基类中定义的并且必须在派生类中重写的方法,使用abstract关键字定义。抽象方法只能在抽象类中定义,且因抽象类无法实例化,抽象方法不能被调用。
public abstract class Animal { //字段、属性 public abstract void Shout();//抽象方法 } public class Pig : Animal { public override void Shout() { Console.WriteLine("哼哼叫"); } }
Pig pig = new Pig(); pig.Shout(); Console.ReadKey();
抽象方法是用abstract修饰;抽象方法没有方法体;抽象方法必须在抽象类中;父类是抽象类,子类继承了这个类,必须把抽象类中的抽象方法重写。
(五、)隐藏方法
在派生类中定义的和基类中的某个方法同名的方法,使用new关键字定义。如在基类Animal中有一方法Sleep():
public void Sleep() { Console.WriteLine("Animal Sleep"); }则在派生类Cat中定义隐藏方法的代码为:
new public void Sleep() { Console.WriteLine("Cat Sleep"); }隐藏方法不但可以隐藏基类中的虚方法,而且也可以隐藏基类中的非虚方法;隐藏方法中父类的实例调用父类的方法,子类的实例调用子类的方法。
以上就是C#多态性一些相关概念的简单总结。。。
- C#多态前奏
- 重写前奏~继承和多态
- 黑马程序员-C#入门前奏
- 前奏
- 前奏!
- C#设计模式前奏-面向对象设计原则
- 毕业前奏
- 西安前奏
- 1.前奏
- zhaogongzuo前奏
- Java-前奏
- RMAN前奏
- java前奏
- 社会工程学前奏:忽悠
- 油荒,涨价的前奏
- 跨越交汇点的前奏
- 目标和想法,前奏~!
- 实习开始前奏
- AsyncTask 和Handler 的优缺点比较
- Android Service串行服务:IntentService(系列3)
- 36.Android 自定义ContentProvider
- 软件工程(C编码实践篇)学习总结
- java中i=i++问题分析
- C#多态前奏
- View类通用模板(C#)
- Head First Python第三章知识点记录
- Java类的连接与初始化
- 遗传算法
- java读XML
- 5个零售业大数据带来巨大收益的实例(译文)
- Java 注解入门实例 && 注解传参
- Display all 2165 possibilities? (y or n)