虚方法用父类定义的时候,显示的是子类方法
隐藏方法用父类定义的时候,显示的是父类方法
虚方法用父类定义的时候,显示的是子类方法
隐藏方法用父类定义的时候,显示的是父类方法
隐藏方法加关键字new ,就会隐藏父类方法
当我们通过父类声明的对象去调用这个方法的时候如果是虚方法的话依然会调用重写后的方法,如果是隐藏方法的话他就会调用父类里面的方法
隐藏重写方法
基类的函数正常写。
public new void AI()
{
重写方法
}
//添加关键字new可以把原本的函数给隐藏。从而达到重写方法的目的
调用:
基类 Z=new 派生类 //如:派生类中有使用隐藏方法重写的函数
此时调用的是基类方法,并非派生类中新创建的隐藏方法。
原因:此时构造派生类实际上实际上是创建了一个新的同名方法,而并非覆盖基类原有的同名方法。
且编译器只知道"Z"是一个基类类型。因此它只能调用基类中存在的方法。
即使派生类中定义了同一个方法,该方法也不会被调用。(因为基类引用无法访问派生类新增成员。)
虚方法是覆盖,隐藏方法是隐藏
隐藏方法
通过隐藏方法来重写
public new viod AI(){...}
相当于直接重写+new,防止出错
这两种virtual和隐藏方向的区别是,在调用函数的时候virtual会调用重写后的方法,也就是子类的,但隐藏方法只是在子类重新
enemy = new Boss(50,50,50);//但enemy.BossSkill()用不了
//enemy = new EnemyType1();
Boss c;
//不能这么设置c = new Enemy();
Enemy enemyboss = new Boss(11, 44, 55);
enemyboss.Move();//用的是boss的move方法,这是虚方法重写Move
enemyboss.AI();//用的是enemy的move方法,这是隐藏方法重写AI
写隐藏方法的时候, 父类的方法不需要做任何改变。
子类进行重写时 是直接重写。然后在子类的修饰词加上new关键字。
隐藏方法在调用时必须使用子类申明的类型的对象。
隐藏方法在使用父类类型申明的对象调用时调用的是父类的方法。
隐藏方法:直接重写 new
public new void AI()
{
}
父类声明对象:
1.虚方法则会调用子类的重写的方法;
2.隐藏方法会调用父类里的方法