C#多态知识点

多态
1、定义:
what:多态是一种同一个行为具有多个不同表现形是或形态的能力
·白话表述:让一个对象表现出多种的状态(类型 )
·精炼表述:通过继承实现的不同对象调用相同的方法,表现出不同的行为,称之为多态(老师说面试的时候用出来,还没有试过)
Why:解决对重复代码频繁修改的问题

2、多态的应用
实现多态的三种方法
a.虚方法
b.抽象类
c.接口

3、实现多态的两个要素
1)子类重写父类方法
2)转型

4、好处:
1)可替换性(subst ut ablity) 。多态对已存在代码具有可替换性。
2)可扩充性(extensibility) 。多态对代码具有可扩充性。增加新的子类不影响已存在类的多态性、继承性, 以及其他特性的运行和操作。
3)接口性(interface-ablity) 。多态是超类通过方法签名, 向子类提供了一个共同接口, 由子类来完善或者覆盖它而实现的。
4)灵活性(flexibility) 。它在应用中体现了灵活多样的操作, 提高了使用效率。
5)简化性(simplicity) 。多态简化对应用软件的代码编写和修改过程, 尤其在处理大量对象的运算和操作时, 这个特点尤为突出和重要。

5、向上转型和向下转型
向上转型:父类引用指向子类对象
例如:Animal anima = new Dog();
向下转型:子类引用指向父类对象
例如:Dog dog = (Dog) Animal;不安全
6、案例

class Animal
  {
    
    
   public virtual void Eat()//虚方法
     {
    
    
       Console.WriteLine("动物吃饭");
     }
  }
class Dog : Animal
  {
    
    
    public int age = 2;
    public override void Eat()//子类重写父类
     {
    
    
      Console.WriteLine("狗吃骨头");
     }
  }
class Cat : Animal
  {
    
    
   public string sex = "公";
   public override void Eat()//子类重写父类
    {
    
    
      Console.WriteLine("猫吃鱼");
    }
  }
//is用于判断一个类型是否是一种类型   son is Person :真或假
//as用于引用类型转换   成功则为非空,失败则为空  son as Person:null或对象
class Master
 {
    
    
  void Feed(Animal a)//父类做参数
   {
    
    
    if (a is Dog)//判断a是狗
     {
    
    
      // Dog d =(Dog) a;//向下转型
      Dog d = a as Dog;//向下转型
      d.age = 2;
      Console.WriteLine("狗的年龄:" + d.age);
     }
    else if (a is Cat)//判断a是猫
     {
    
    
       Cat c = (Cat)a;//向下转型
       c.sex = "母";
       Console.WriteLine("猫的性别:" + c.sex);
     }
      a.Eat();
 }
static void Main(string[] args)
  {
    
    
   Master m = new Master();
   Animal dog = new Dog();//向下转型    
   m.Feed(dog);
   Animal cat = new Cat();//向下转型
   m.Feed(cat);   
  }

//看着有点绕,只要知道什么是向上转型,什么是向下转型就好了
//还有就是多态需要具备两个要素:
//a.子类重写父类方法
//b.转型

猜你喜欢

转载自blog.csdn.net/weixin_44706943/article/details/125959638
今日推荐