做淘宝客网站制作教程,专业网站建设网站设计,私域流量运营管理,山西省网站建设哪家好多态#xff0c;不同的对象对同一个方法有不同的响应。 目的#xff0c;为了解决继承中父类访问子类方法要转型的问题。 还是继承的问题#xff0c;父类实例化子类#xff0c;被看成父类类型。
条件#xff1a;
多态 (3种方式)
1, 基于继承 重写 父类实例子类化#xff…多态不同的对象对同一个方法有不同的响应。 目的为了解决继承中父类访问子类方法要转型的问题。 还是继承的问题父类实例化子类被看成父类类型。
条件
多态 (3种方式)
1, 基于继承 重写 父类实例子类化父类的引用指向子类的对象
2, 抽象类和抽象方法
3, 接口实现本文主要讲 抽象父类多态abstract和虚方法多态(virtual)。
1,抽象多态。 注意点 a,抽象方法没有方法体并且用abstract修饰。 b,抽象方法必须放在抽象类中类也用abstract修饰。 c,抽象类不能被实例化。 d,抽象类具有强制性。 父类有抽象方法非抽象子类也必须有。 但是子类也是抽象类可不必实现。 这样方便代码规范管理及命名标准。
using System;namespace 多态
{class Program{static void Main(string[] args){Console.WriteLine(Hello World!);Person[] p new Person[2];p[0] new Student();p[1] new Hoker();//p 可以作为父类的超级容器, 像窗体 form 一样, 里面可以装很多控件。for (int i 0; i p.Length; i){p[i].Study();//只能访问抽象过的重写方法。对其它方法...字段不行。}//这样父类可以访问子类被重写的方法, 但是要转型才可访问非重写方法。Student x new 小学生();x.Show();Student s new Student();s.Study();}}abstract class Person{public abstract void Study();}class Student : Person {string Write;public string learing;public string Write1 { get Write; set Write value; }public override void Study(){Console.WriteLine(我是学生我要在知识的海洋里遨游。);}public virtual void Show(){Console.WriteLine(学生的虚方法);}}class Hoker : Person {public override void Study(){Console.WriteLine(我是hoker,我要睡便全球。);}}class 小学生 : Student{//多态的强制性只对父子类。public override void Show(){Console.WriteLine(小学生 虚方法子类。);}}}/*
结果
我是学生我要在知识的海洋里遨游。
我是hoker,我要睡便全球。小学生 虚方法子类。
我是学生我要在知识的海洋里遨游。
*//*
以上代码分析
person 是抽象类, 父类。里面有抽象方法study() , 子类必须实现。
父类对象, 和子类对象便可实现这个方法形成多态的一种。student继承了person 重写了study 多态便有了意义。student还有virtual show方法。 子类 小学生 里面的show方法也重写了student的show方法。虚方法也可实现多态。
virtual 没有强制性, 可以不必实现, 实现了就不用转型。hoker类 也继承了person 也重写了 study 方法。p[0] 和 p[1]
x 和 s
都分别对study 和 show 有了不同的反应。
*/
2虚方法多态。 a,虚方法所在的类可以不抽象当成普通类使用。 b,子类可以选择性的实现虚方法或者不实现直接继承。 c,虚方法和抽象都解决了父类实例化子类对象需要判断转型的问题。 d,虚方法没有强制性。