多态
作者:互联网
一、多态的概念
同一操作作用于不同的对象,可以有不同的解释,产生不同的执行结果。同一个类型的实例调用“相同”的方法,产生的结果是不同的。
-
重载overload:在同一个作用域(一般指一个类)的两个或多个方法函数名相同,参数列表不同的方法叫做重载。特点:
-
相同的方法名
-
不同的参数列表
-
可以不相同的返回值类型
public void Like() { Console.WriteLine("Like everything"); } public string Like(string name) { Console.WriteLine($"Like {name}"); return name; }
-
-
重写override:子类中为满足自己的需要来重复定义某个方法的不同实现,需要用override关键字,被重写的方法必须是虚方法,用的是virtual关键字。特点:
-
相同的方法名
-
相同的参数列表
-
相同的返回值
public class Test { public virtual void Sleep() { Console.WriteLine("睡着了。。。"); } } public class TestSon:Test { public override void Sleep() { //base.Sleep(); Console.WriteLine("在床上睡着了。。。"); } }
-
-
虚方法:基类中定义的允许在派生类中重写的方法,使用virtual关键字定义。
虚方法可以被直接调用。
public virtual void Sleep() { Console.WriteLine("睡着了。。。"); } public void Show() { this.Sleep(); }
-
抽象方法:在基类中定义的并且必须在派生类中重写的方法,使用abstract关键字定义。
抽象方法只能在抽象类中定义。
public abstract class Testt { public abstract void Sleep(); } public class TesttSon : Testt { public override void Sleep() { Console.WriteLine("必须重写抽象方法"); //throw new NotImplementedException(); } }
注:虚方法和抽象方法的区别,因为抽象类无法实例化,所以抽象方法没有办法被调用,也就是说抽象方法永远不可能被实现。
-
隐藏方法:在派生类中定义的和基类中的某个方法同名的方法,使用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