C# 面向对象——多态,

文章作者:w88手机版登录网络 上传时间:2019-11-08

C# 面向对象——多态,

多态分二种:1.虚方式  

                 2.抽象类

                 3.接口

1、虚方法
1、将父类的主意标识为虚方法 ,使用首要字 virtual,这么些函数能够被子类重新写叁个遍。

如:

图片 1class Program { static void Main(string[] args) { Chinese cn1 = new Chinese("韩梅梅"); Chinese cn2 = new Chinese("李雷"); American a1 = new American("KobeBryant"); American a2 = new American("奥Neil"); Person[] pers = { cn1, cn2, a1, a2, }; for (int i = 0; i < pers.Length; i ) { pers[i].SayHello(); } Console.ReadKey(); } } /// <summary> /// 父类——人类 /// </summary> public class Person { private string _name; public string Name { get { return _name; } set { _name = value; } } public Person(string name) { this.Name = name; } public virtual void SayHello() { Console.WriteLine("作者是全人类"); } } /// <summary> /// 子类——中夏族民共和国人 /// </summary> public class Chinese : Person { public Chinese(string name) : base(name) { } public override void SayHello() { Console.WriteLine("笔者是中夏族,作者叫{0}", this.Name); } } /// <summary> /// 子类——奥地利人 /// </summary> public class American : Person { public American(string name) : base(name) { } public override void SayHello() { Console.WriteLine("小编叫{0},笔者是花旗国人", this.Name); } } View Code

2、抽象类
当父类中的方法不知道什么去实现的时候,能够思谋将父类写成抽象类,将艺术写成肤浅方法。

图片 2class Program { static void Main(string[] args) { //小狗会叫 猫咪会叫 Animal a = new Cat();//new Dog(); a.Bark(); Console.ReadKey(); } } /// <summary> /// 父类——动物 /// </summary> public abstract class Animal { public virtual void T() { Console.WriteLine("动物有表明"); } private int _age; public int Age { get { return _age; } set { _age = value; } } public Animal(int age) { this.Age = age; } public abstract void Bark(); public abstract string Name { get; set; } public Animal() { } } /// <summary> /// 子类——测量试验 /// </summary> public abstract class Test : Animal { } /// <summary> ///子类——狗 /// </summary> public class Dog : Animal { public override void Bark() { Console.WriteLine("黄狗旺旺的叫"); } public override string Name { get { throw new NotImplementedException(); } set { throw new NotImplementedException(); } } } /// <summary> /// 子类——猫 /// </summary> public class Cat : Animal { public override void Bark() { Console.WriteLine("猫猫喵喵的叫"); } public override string Name { get { throw new NotImplementedException(); } set { throw new NotImplementedException(); } } } View Code

抽象类特点:

1卡塔 尔(阿拉伯语:قطر‎.抽象成员必需标识为abstract,并且不能够有别的达成。

public abstract class Animal
{

  public abstract void Bark();

}

2卡塔尔国.抽象成员必需在抽象类中。
3卡塔尔.抽象类不可能被实例化

4卡塔 尔(英语:State of Qatar).子类继承抽象类后,必需把父类中的全数抽象成员都重写。

(除非子类也是贰个抽象类,则能够不重写卡塔 尔(阿拉伯语:قطر‎
5卡塔 尔(英语:State of Qatar).抽象成员的拜谒修饰符不能是private
6卡塔 尔(阿拉伯语:قطر‎.在抽象类中能够分包实例成员。
並且抽象类的实例成员能够不被子类达成

7卡塔 尔(阿拉伯语:قطر‎.抽象类是有构造函数的。纵然不能被实例化。

8卡塔 尔(阿拉伯语:قطر‎、假如父类的悬空方法中有参数,那么。世袭那些抽象父类的子类在重写父类的不二等秘书籍的时候必需传入对应的参数。

假若抽象父类的悬空方法中有重回值,那么子类在重写这些抽象方法的时候 也一定要传播重回值。

3.接口

图片 3class Program { static void Main(string[] args) { IFlyable fly = new Bird();//new Person(); fly.Fly(); Console.ReadKey(); } } public class Person:IFlyable { public void Fly() { Console.WriteLine("人类在飞"); } } public class Student { public void Fly() { Console.WriteLine("人类在飞"); } } public class Bird : IFlyable { public void Fly() { Console.WriteLine("鸟在飞"); } } public interface IFlyable { //不允许有访谈修饰符 默以为public //方法、自动属性 void Fly(); } public interface M1 { void Test1(); } public interface M2 { void Test2(); } public interface M3 { void Test3(); } public interface SupperInterface : M1, M2, M3 { } public class Car : SupperInterface { public void Test1() { throw new NotImplementedException(); } public void Test2() { throw new NotImplementedException(); } public void Test3() { throw new NotImplementedException(); } } View Code

接口是生龙活虎种标准。
只要二个类世襲了一个接口,那几个类就务须得以完结这一个接口中具备的成员

为了多态。 接口不可能被实例化。
也正是说,接口不能够new(不能够创制对象)

接口中的成员不可能加“访问修饰符”,接口中的成员访谈修饰符为public,不能够改过。

(默以为public卡塔 尔(英语:State of Qatar)接口中的成员不能够有别的完结(“光说不做”,只是概念了大器晚成组未兑现的分子卡塔尔。

接口中必须要有主意、属性、索引器、事件,无法有“字段”和构造函数。

接口与接口之间能够接二连三,并且能够多一而再。

接口并不能够去继续一个类,而类能够接二连三接口 (接口只好接二连三于接口,而类不仅可以够一而再接二连三接口,也能够世襲类卡塔 尔(英语:State of Qatar)

完毕接口的子类必得兑现该接口的成套成员。

三个类能够并且继续二个类并落到实处三个接口,假使叁个子类同一时候继续了父类A,并完成了接口IA,那么语法上A必得写在IA的前边。

class MyClass:A,IA{},因为类是单世袭的。

展示完毕接口的目标:化解方法的重名难题
怎么着时候显得的去完成接口:
当世襲的借口中的方法和参数生机勃勃摸同一时候,假设用突显的完毕接口

当一个抽象类达成接口的时候,供给子类去落到实处接口。

======
即使父类中的方法有暗许的落到实处,并且父类须要被实例化,此时能够假造将父类定义成两个普通类,用虚方法来落实多态。

假设父类中的方法没有默许达成,父类也没有必要被实例化,则能够将此类定义为抽象类。

 

面向对象——多态, 多态分三种:1.虚方法 2.虚幻类 3.接口 1、虚方法 1、将父类的办法标志为虚方法 ,使用主要字 virtual,那一个函数能够...

本文由w88手机版登录-www.w88zhan.com-优德w88app官方登录发布于w88手机版登录网络,转载请注明出处:C# 面向对象——多态,

关键词: