zoukankan      html  css  js  c++  java
  • C#多态

    多态

    我的理解就是同一个类型的实例调用“相同”的方法,产生的结果是不同的

    重载:同一作用域下方法名相同但参数列表不相同

    重写:被重写的方法一定是虚方法,用virtual标识,重写加上override标识。

    父类当中定义

     public virtual void EatFood()
            {
                Console.WriteLine("Animal吃东西");
            } 
    

    子类当中定义

      public override void EatFood()
            {
                Console.WriteLine("Cat吃东西");
                //base.EatFood();
            }
    

    虚方法

     public virtual void EatFood()
            {
                Console.WriteLine("Animal吃东西");
            }
    

    注意virtual在本类中就相当于没有virtual,对子类的ovrride来说,才是虚方法。
    所以这么写不能实现多态,而且会报错

           public virtual void EatFood()
            {
                Console.WriteLine("Animal吃东西");
            }
    
           public void EatFood()
            {
                Console.WriteLine("Animal吃东西");
            }
    

    抽象方法:

    public abstract class Biology
        {
            public abstract void Live();
        }
        public class Animal : Biology
        {
            public override void Live()
            {
                Console.WriteLine("Animal重写的抽象方法");
                //throw new NotImplementedException();
            } 
    

    隐藏方法

      public void Sleep()
            {
                Console.WriteLine("Animal Sleep");
            }
    

    派生类当中

     new public void Sleep()
            {
                Console.WriteLine("Cat Sleep");
            }
    

    注意加载父类的时候会先把父类的构造方法执行一边,然后执行子类构造方法 , 调用父类的代码块用base,调用当前类用this

    引用,原blog地址:http://www.cnblogs.com/zhangkai2237/archive/2012/12/20/2826734.html

  • 相关阅读:
    2019.8.8 python day03
    2019.8.7 python进阶day02
    2019.8.6(python day01)
    2019.8.5
    2019.8.2
    2019.8.1
    2019.7.31
    2019.7.30
    面向对象进阶
    访问可见性问题和@property装饰器
  • 原文地址:https://www.cnblogs.com/wuqingzangyue/p/5735677.html
Copyright © 2011-2022 走看看