1. 重载 重写
c#中也好,java中也好,都有重载 重写,我们还是先从概念看一下吧,
重载 : 就是在一个类中,可以编写几个同名的方法,但是它们的签名参数列表不完全同(参数个数或顺序不同)
private int GetTestA(int i){}
private int GetTestA(int j){}
上面2个方法在同一个类中,不是重载,他们的名字和参数列表完全相同,这下明白,参数列表不完全相同的含义了吧
重写:子类覆盖父类中的方法,主要用于多态,比如,一个是Person 父类 一个是Student 子类, 父类中定义了一个方法,chat(), 定义如下,Person person = new Student();//上转型,若是Student中重写了此方法,前提是父类中用了virtual 修饰此方法,和java中国不一样,c#中默认是不允许重写的,接着说,则用person调用chat();则调用的是子类中定义的方法,要是没重写,则调用的是父类中的,这就是重写在多态中的意义
如果非要说说他们俩的区别和联系,表面是是针对一个类来说的,重载至少两个类,继承关系,实质上他们除了 一个字相同外,没啥其他的联系了
2.重写 隐藏
隐藏:指的是子类隐藏父类中的方法,还是用实例来说明重写和隐藏吧,code如下:
class Person
{
public virtual void MethondA()
{
Console.WriteLine("person methonda");
}
public void MethondB()
{
Console.WriteLine("person methondb");
}
}
class Student : Person
{
public override void MethondA()
{//重写了父类中的方法
Console.WriteLine("student methonda");
}
public void MethondB()
{//隐式的隐藏了父类中的方法,编译后,会为你自动加上new关键字
Console.WriteLine("student methondb");
}
}
class Test{
public static boid main(string[] args){
Person per = new Person();
per.MethondA();//父类方法
per.MethondB();//父类方法
Student student = new Student();
student.MethondA();//子类方法
student.MethondB();//子类方法,这是隐藏父类中方法的体现,要是不隐藏父类中的方法,则此处调用的是父类中的方法
Person person = new Student();//多态性的体现
person.MethondA();//子类,重写调用的是子类方法
person.MethondB();//父类,隐藏,不论显示还是隐式都死调用的是父类
Console.ReadLine();//多说两句,vitual 是不能是private,static合用的,这样上转型中,调用的static方法肯定是父类中的,
}
}
PS:上面说的重写,隐藏说的都是方法,其实对于属性也是适用的 ,主要平日里用的方法最多,算是口误吧,