如果签名相同的方法在基类和派生类中都进行了声明,但该方法没有声明为virtual 和 override,派生类的方法就会隐藏基类的方法。一般要求在派生类相同签名的方法上加上new关键字。
访问修饰符 new 类型 成员名
new 访问修饰符 类型 成员名
如果父类中的方法使用virtual关键字修饰,子类中的同名方法使用override修饰,那么该方法就构成了方法的重写。
public virtual 方法名称(参数列表){方法体;} //基类
public override 方法名称(参数列表){方法体;} //派生类
不管是方法隐藏还是方法重写,父类对象调用的是父类的方法,而子类对象调用的是子类的方法。
当我们需要某个基类型的变量时,可以把某个派生类型的变量赋给基类型的变量,这种特性称之为向上转型。通俗点就是说先创建一个子类对象,然后把它强制转型为父类对象。
但是在向上转型后,重写基类方法调用的是派生类的方法,而隐藏基类调用的是基类的方法(重写基类方法实现了多态)。
一个基类的引用,可以指向多个派生类对象,具有多种不同的形态,这种现象叫做多态性。
多态性允许你将父对象设置成为一个或更多的它的子对象,赋值之后,父对象就可以根据当前赋值给它的子对象的特性以不同的方式运作。
class B:A{
……
}
A a = new A();
A b = new B();
static void test(A a);
A a=new A();
B b=new B();
test(b);