兰州建网站的,wordpress 活动未开始,开通网站主机,wordpress会员等级下载一. 重写
1. 关键字#xff1a;new
2. 含义#xff1a;子类继承父类中的普通方法#xff0c;如果在子类中重写了一个和父类中完全相同的方法#xff0c;子类中会报警告(问是否显式的隐藏父类的中的方法)#xff0c;如果在子类中的方法前加上new关键字#xff0c;则警告…一. 重写
1. 关键字new
2. 含义子类继承父类中的普通方法如果在子类中重写了一个和父类中完全相同的方法子类中会报警告(问是否显式的隐藏父类的中的方法)如果在子类中的方法前加上new关键字则警告消失。
注意 * 虽然可以不使用 new 修饰符来隐藏成员但将收到编译器警告。 如果使用 new 来显式隐藏成员将禁止此警告。 * 这里需要特别注意隐藏父类方法是指声明的完全是子类实例, eg child类继承parent类, 并在child类中重新声明了一个和parent中相同的方法show。
那么分两种情况 * a. child cnew child(); c.show()进行调用无论child类中的show方法前加没加new关键字调用的都是child类中的方法,只是加上new关键字后不出警告。 * b. parent pnew child(); p.show()进行调用无论child类中的show方法前加没加new关键字调用的都是parent类中的方法因为这是不同方法不涉及override不满足上述声明的new关键字替换父类中的方法的描述。
3. 声明一个parentClass父类里面有三个方法。 1 public abstract class parentClass2 {3 //下面两个普通方法实现自身的重载4 public void CommonMethord1()5 {6 Console.WriteLine(parentClass CommonMethord1);7 }8 public void CommonMethord1(string msg)9 {
10 Console.WriteLine(parentClass CommonMethord1);
11 }
12 public void CommonMethord2()
13 {
14 Console.WriteLine(parentClass CommonMethord2);
15 }
16 } 4. 声明一个childClass类里面重写了两个方法。 1 public class childClass : parentClass2 {3 /// summary4 /// 单独声明子类实例的时候,将替换父类中的方法5 /// /summary6 public void CommonMethord1()7 {8 Console.WriteLine(childClass CommonMethord1);9 }
10 /// summary
11 /// new 关键字去除上述警告单独声明子类实例的时候,将替换父类中的方法
12 /// /summary
13 /// param namemsg/param
14 public new void CommonMethord1(string msg)
15 {
16 Console.WriteLine(childClass CommonMethord1);
17 }
18 } 5. 调用 1 {2 parentClass p1 new childClass();3 childClass p2 new childClass();4 Console.WriteLine(-----------------------------1.子类的直接调用--------------------------------------);5 p2.CommonMethord1(); //结果子类方法 (非显式隐藏但也隐藏了会报警告)6 p2.CommonMethord1(ddd); //结果子类方法 (含有new关键字显式的隐藏了父类中的方法没有警告)7 p2.CommonMethord2(); //结果父类方法8 9 Console.WriteLine(-----------------------------2.普通方法重写调用的都是父类方法--------------------------------------);
10 p1.CommonMethord1(); //结果父类方法
11 p1.CommonMethord1(ddd); //结果父类方法
12 p1.CommonMethord2(); //结果父类方法
13 } 二. 覆写
1. 关键字override
2. 含义在子类中继承的父类中的抽象方法(abstract)和虚方法(virtual),子类可以对其进行覆写,其中父类中的抽象方法,子类中必须被覆写。 抽象方法没有方法体子类必须覆写。 虚方法必须有方法体子类可以对其进行覆写也可以不进行覆写。
3. 新建一个名叫parentClass的抽象类里面有一个抽象方法和两个虚方法。 1 public abstract class parentClass2 {3 //下面为抽象方法4 public abstract void abstractMethord();5 //下面两个方法为虚方法6 public virtual void virtualMethord1()7 {8 Console.WriteLine(parentClass virtualMethord1);9 }
10 public virtual void virtualMethord2()
11 {
12 Console.WriteLine(parentClass virtualMethord2);
13 }
14 } 4. 新建一个childClass子类继承parentClass类并且对virtualMethord2虚方法进行覆写 1 public class childClass : parentClass2 {3 4 public override void abstractMethord()5 {6 Console.WriteLine(childClass abstractMethord);7 }8 //加上sealed关键字子类将不能对其继续进行覆写9 public sealed override void virtualMethord2()
10 {
11 Console.WriteLine(childClass virtualMethord2);
12 }
13 } 5. 调用 1 parentClass p1 new childClass();2 childClass p2 new childClass();3 Console.WriteLine(-----------------------------1.子类的直接调用--------------------------------------);4 p2.abstractMethord(); //结果子类方法5 p2.virtualMethord1(); //结果父类方法6 p2.virtualMethord2(); //结果子类方法7 Console.WriteLine(-----------------------------2.抽象类(符合里氏替换原则)的形式调用--------------------------------------);8 p1.abstractMethord(); //结果子类方法9 p1.virtualMethord1(); //结果父类方法
10 p1.virtualMethord2(); //结果子类方法 三. 重载overload
1. 关键字无关键字
2. 含义在同一个类中同一个名称的方法参数的个数不同、参数类型不同、参数个数和参数类型都不同
eg: parentClass中的CommonMethord1的两个方法就是重载