C#基础-----虚方法实现多态
来源:互联网 发布:ubuntu 怎么进入u盘 编辑:程序博客网 时间:2024/04/30 06:47
虚方法:用virtual修饰的方法叫做虚方法
虚方法可以在子类中通过override关键字来重写
常见的虚方法:ToString(). Equals
虚方法特点总结:
1,在父类中把需要设置为虚方法的方法前加virtual标记;
2,虚方法在父类中必须有实现,哪怕是空实现
3,子类继承父类后,可以选择对虚方法进行重写也可以选择不进行重写;
4,当子类重写父类方法的时候,必须保证重写后的方法和原方法的访问修饰符,返回值类型,方法名,参数列表完全一致;
5,当方法的标记是virtual和override的时候都可以重写。
方法重写注意事项:
子类重写父类方法时,必须与父类保持一致的方法签名与返回值类型。即:方法名、返回值类型、参数列表都必须保持一致。[访问修饰符也得一致]
“方法签名”:一般是指方法的【名称】+方法的【参数列表】,不包含方法返回值类型
虚方法与重写
1、方法不能用static修饰
2、方法重写与基类的签名必须一致
3、virtual不能与private一起使用
4.虚方法为什么不能加static因为 虚方法是父类,加static,那么就是类调用这个方法,和对象无关了,那子类就调不了,
base.Fun();的目的主要是添加逻辑
override与重载(overload)的区别
重载是方法的名称相同。参数或参数类型不同,进行多次重载以适应不同的需要。重载(overload)是面向过程的概念。
Override是进行基类中函数的重写。Override是面向对象的概念
虚方法实现多态
class Program { static void Main(string[] args) { #region 通过虚方法实现多态 Person[] people = new Person[6]; Chinese cn1 = new Chinese(); Chinese cn2 = new Chinese(); British br1 = new British(); British br2 = new British(); Japanese jp1 = new Japanese(); American am1 = new American(); people[0] = cn1; people[1] = cn2; people[2] = br1; people[3] = br2; people[4] = jp1; people[5] = am1; //开放封闭原则:对扩展开放,对修改封闭。 for (int i = 0; i < people.Length; i++) { //因为Person类型中没有Show方法所以无法直接通过Person类型调用Show()方法。 //people[i].Show(); #region 判断对象类型,进行转换,然后调用不同的方法。 Chinese cn = (Chinese)people[i]; cn.Show(); if (people[i] is Chinese) { Chinese cn = (Chinese)people[i]; cn.Show(); } else if (people[i] is British) { British uk = (British)people[i]; uk.Show(); } else if (people[i] is Japanese) { Japanese jp = (Japanese)people[i]; jp.Show(); } #endregion //这句话体现了多态。。。。 people[i].Show(); //} //Console.ReadKey(); #endregion } } public class Person { public string Name { get; set; } public int Age { get; set; } public int Height { get; set; } //在Person类型中增加一个Show()方法。 //第一步:将父类中的Show方法标记为virtual(虚方法) public virtual void Show() { //Console.WriteLine("Person 中的 Show方法。"); } } //高丽 public class Korean : Person { public override void Show() { Console.WriteLine("我是高丽人"); } } /// <summary> /// 朝鲜 /// </summary> public class NorthKorean : Korean { public override void Show() { Console.WriteLine("我是朝鲜人!!!!"); } } public class American : Person { //当进行方法重写的时候,必须使用override关键字。 public override void Show() { Console.WriteLine("我是美国人!"); } } /// <summary> /// 中国人类 /// </summary> public class Chinese : Person { //重写父类中的方法(覆盖)override public override void Show() { Console.WriteLine("我是中国人"); } } /// <summary> /// 英国人类 /// </summary> public class British : Person { public override void Show() { Console.WriteLine("我是英国人"); } } /// <summary> /// 日本人类 /// </summary> public class Japanese : Person { public override void Show() { Console.WriteLine("我是日本人"); } }
0 0
- C#基础-----虚方法实现多态
- C#多态实现之虚方法
- C#基础-----抽象类实现多态
- C#基础-----接口实现多态
- C#多态的实现:虚方法、抽象类、接口
- 【C#基础】虚方法和抽象方法
- C#多态性-虚拟方法实现多态
- C#多态性-虚拟方法实现多态
- C#基础-054 自己实现的一些字符串系统方法
- C# 基础加强(三) 虚方法:virtual
- C#基础:匿名方法
- C#基础-方法
- [C#基础]字符串方法
- C#多态性基础实现
- C# 适应虚函数,抽象类,接口分别实现多态的方法总结。
- 虚方法实现多态 C#中的5种访问修饰符
- 浅谈C# 多态的魅力(虚方法,抽象,接口实现)
- 浅谈C# 多态的魅力(虚方法,抽象,接口实现)
- MYSQL分库分表总结
- STL源码剖析之【二分查找】
- Android 基于Netty的消息推送方案之概念和工作原理(二)
- signal与定时器
- Eclipse启动时f出现ail to create Java Virtual Machine问题的解决
- C#基础-----虚方法实现多态
- [pgsql]pgsql数据库时间函数
- Android 基于Netty的消息推送方案之字符串的接收和发送(三)
- 查看可执行程序的依赖库
- Js获取当前日期时间及其它操作
- 不使用UIImagePickerControllerOriginalImage获取相册图片
- MongoDB常用命令
- 九度1012畅通工程(并查集)
- Android 基于Netty的消息推送方案之对象的传递(四)