其他分享
首页 > 其他分享> > 多态

多态

作者:互联网

一、多态的概念

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

  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