zoukankan      html  css  js  c++  java
  • 多态

    多态的概念
            首先解释下什么叫多态:同一操作作用于不同的对象,可以有不同的解释,产生不同的执行结果,这就是多态性。换句话说,实际上就是同一个类型的实例调用“相同”的方法,产生的结果是不同的。这里的“相同”打上双引号是因为这里的相同的方法仅仅是看上去相同的方法,实际上它们调用的方法是不同的。
    (龙生九子,各有不同;有了继承才有了多态)
     
            说到多态,我们不能免俗的提到下面几个概念:重写、虚方法、抽象、接口。
     
    1.虚方法  关键字:virtual
      重写     关键字:override

    父类中的方法,在子类中并不适用,那么子类需要自主更改继承的方法或者是属性,那父类中加了virtual关键字的方法才可以被子类重写,子类重写父类的方法使用的是override关键字

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    
    namespace 多态
    {
        class Program
        {
            static void Main(string[] args)
            {
                Bird b = new Bird();
                Console.WriteLine(b.fling());
    
                Plane p = new Plane();
                Console.WriteLine(p.fling());
                Console.ReadKey();
            }
        }
    }
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    
    namespace 多态
    {
        public class Fly
        {
            //虚方法:virtual
            public virtual string fling()
            {
                return "拍拍翅膀就会飞!";
            }
        }
    }
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    
    namespace 多态
    {
        public class Bird:Fly
        {
        }
    }
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    
    namespace 多态
    {
        public class Plane:Fly
        {
            public override string fling()
            {
                return "发动引擎就能飞!";
            }
        }
    }

    2、抽象类
    是因为普通的多态虚方法没有人用本身的方法主体。

    抽象类就是来当亲爹,abstract,不能实例化。
    抽象类中可以有抽象方法:abstract
    抽象方法一定在抽象类中,但是抽象类中不一定只有抽象方法,也可以有普通方法

    注意:抽象方法只能在抽象类中定义,如果不在抽象类中定义,则会报出如下错误:  
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    
    namespace 抽象
    {
        class Program
        {
            static void Main(string[] args)
            {
                Bird b = new Bird();
                Console.WriteLine(b.fling());
                Console.WriteLine(b.Eat());
                Console.ReadKey();
            }
        }
    }
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    
    namespace 抽象
    {
        //抽象类
        public abstract class Fly
        {
            //抽象方法
            public abstract string fling();
            //普通方法
            public string Eat()
            {
                return "吃虫子!";
            }
        }
    }
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    
    namespace 抽象
    {
        public class Bird:Fly
        {
            public override string fling()
            {
                return "拍拍翅膀就能飞!";
            }
            
        }
    }

    3、接口
    1、吃饭,睡觉 - 基础类
    2、技能,地点 - 赚钱类
    3、娱乐1,娱乐2 - 娱乐类

    接口就是出来做 干爹的,接口不是类 interface
    编写方法格式: string 方法名();
    实现接口的方法 不要override,直接正常编写就可以了;

    接口里面只能有抽象方法

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    
    namespace 接口
    {
        class Program
        {
            static void Main(string[] args)
            {
                NanRen nr = new NanRen();
                Console.WriteLine(nr.Eat()+nr.Sleep()+nr.yule1());
                Console.ReadKey();
            }
        }
    }
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    
    namespace 接口
    {
        //抽象类
        public abstract class Jichulei
        {
            public abstract string Eat();
            public abstract string Sleep();
        }
    }
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    
    namespace 接口
    {
        //关键字+接口名
        interface zhuanqian
        {
            //string +方法名
            string JiNeng();
            string DiDian();
        }
    }
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    
    namespace 接口
    {
        interface Yule
        {
            string yule1();
            string yule2();
        }
    }
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    
    namespace 接口
    {
        public class NanRen:Jichulei,zhuanqian,Yule
        {
            public override string Eat()
            {
                return "大口吃";
            }
            public override string Sleep()
            {
                return "仰着睡";
            }
            public  string JiNeng()
            {
                return "编程";
            }
            public  string DiDian()
            {
                return "中南海";
            }
            public  string yule1()
            {
                return "打篮球";
            }
            public  string yule2()
            {
                return "斗地主";
            }
        }
    }
     
  • 相关阅读:
    删数问题
    八中公司_二分图带权最大匹配模板题
    完美子图(这道题太难了,得写下来要不回头又忘了)
    最近集训的图论(思路+实现)题目汇总(内容包含tarjan、分层图、拓扑、差分、奇怪的最短路):
    方格取数(简单版)+小烈送菜(不知道哪来的题)-----------奇怪的dp增加了!
    单调队列优化题:最大数(P1198)
    单调队列+线性dp题Watching Fireworks is Fun (CF372C)
    关于看了几道洛谷灰题(暂无评定)的感想
    洛谷的奇妙今日运势
    互不侵犯(洛谷P1896)
  • 原文地址:https://www.cnblogs.com/maxin991025-/p/6106704.html
Copyright © 2011-2022 走看看