ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

多态

2022-09-04 21:34:12  阅读:196  来源: 互联网

标签:Console void 多态 Sleep WriteLine 方法 public


一、多态的概念

同一操作作用于不同的对象,可以有不同的解释,产生不同的执行结果。同一个类型的实例调用“相同”的方法,产生的结果是不同的。

  1. 重载overload:在同一个作用域(一般指一个类)的两个或多个方法函数名相同,参数列表不同的方法叫做重载。特点:

    • 相同的方法名

    • 不同的参数列表

    • 可以不相同的返回值类型

    public void Like()
    {
        Console.WriteLine("Like everything");
    }
    ​
    public string Like(string name)
    {
        Console.WriteLine($"Like {name}");
        return name;
    }
  2. 重写override:子类中为满足自己的需要来重复定义某个方法的不同实现,需要用override关键字,被重写的方法必须是虚方法,用的是virtual关键字。特点:

    • 相同的方法名

    • 相同的参数列表

    • 相同的返回值

    public class Test
    {
        public virtual void Sleep()
        {
            Console.WriteLine("睡着了。。。");
        }
    }
    ​
    public class TestSon:Test
    {
        public override void Sleep()
        {
            //base.Sleep();
            Console.WriteLine("在床上睡着了。。。");
        }
    }
  3. 虚方法:基类中定义的允许在派生类中重写的方法,使用virtual关键字定义。

    虚方法可以被直接调用。

    public virtual void Sleep()
    {
        Console.WriteLine("睡着了。。。");
    }
    ​
    public void Show()
    {
        this.Sleep();
    }
  4. 抽象方法:在基类中定义的并且必须在派生类中重写的方法,使用abstract关键字定义。

    抽象方法只能在抽象类中定义。

    public abstract class Testt
    {
        public abstract void Sleep();
    }
    ​
    public class TesttSon : Testt
    {
        public override void Sleep()
        {
            Console.WriteLine("必须重写抽象方法");
            //throw new NotImplementedException();
        }
    }

    注:虚方法和抽象方法的区别,因为抽象类无法实例化,所以抽象方法没有办法被调用,也就是说抽象方法永远不可能被实现。

  5. 隐藏方法:在派生类中定义的和基类中的某个方法同名的方法,使用new关键字定义。

    public class Testtt
    {
        public void Sleep()
        {
            Console.WriteLine("这是基类方法");
        }
    }
    ​
    public class TestttSon:Testtt
    {
        public new void Sleep()
        //new和public顺序可更换
        {
            Console.WriteLine("这是子类隐藏方法");
        }
    }

    注:

    • 基类中的虚方法和非虚方法都可以隐藏。

    • 隐藏方法中父类的实例调用父类的方法,子类的实例调用子类的方法。

    • 重写方法中子类的变量调用子类重写的方法,父类的变量要看这个父类引用的是子类的实例还是本身的实例,如果引用的是父类的实例那么调用基类的方法,如果引用的是派生类的实例则调用派生类的方法。

标签:Console,void,多态,Sleep,WriteLine,方法,public
来源: https://www.cnblogs.com/celestially98/p/16656139.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有