C#中继承实现⽗类⽅法、重写、重载
C#中⼦类重写⽗类⽅法的⼏种情况,关键字:virtual、abstract、override、new。(此处不说abstract,以后补充)
virtual:不是必须被⼦类重写的⽅法,⽗类必须给出实现,⼦类可以重写(使⽤override,new,或⽆特殊标志的普通⽅法),也可以不重写该⽅法。
new:重写⽗类⽅法时,⽗类可以使⽤virtual,override,new之⼀声明,也可以是没有关键字的普通⽅法,运⾏时会根据引⽤类型选择调⽤⽗类还是⼦类⽅法,重写⽗类⽅法时,使⽤new关键字与使⽤没有关键字的普通⽅法的等效的,但是后者会给出编译警告。
继承:
继承是派⽣类(⼦类)去实现(重写<override>、重构<new>)基类(⽗类)的⽅法或属性。从⽽获取在派⽣类中要实现的功能。
⼦类调⽤⽗类构造⽅法,在⽗类中有个实现姓名和年龄的构造⽅法但是⼦类中也要实现这样的功能时,⼦类不⽤再次去写这个功能,只要去调⽤⽗类的功能即可。
1. #region
2. public class Person
3. {
4. private string _name ;
5. private int _age ;
6. public Person(string name, int age)//⽗类的构造⽅法
7. {
8. this._name = name;//获得参数的值
9. this._age = age;
0. Console.WriteLine("您的姓名是{0},您的年龄是{1}.",this._name, this._age);
1. }
12.
3. }
4. public class Studnet : Person
5. {
6. private int _id;
7. public Studnet(string name, int age, int IDCard):base(name, age)//⼦类构造⽅法继承⽗类构造⽅
8. //把接受到的name、age两个参数交给⽗类的构造⽅法去处理
9. {
0. this._id = IDCard;
1. Console.WriteLine("您的⾝份证号码为{0}", this._id);
3. }
24.
25.
6. class Program
7. {
8. static void Main(string[] args)//主函数
9. {
0. Studnet stu = new Studnet("⼩王", 18, 340406);
1. Console.ReadLine();
2. }
3. }
4. #endregion
实现结果:
您的姓名是 ⼩王,您的年龄是 18.
您的⾝份证号码为 340406
⼦类调⽤⽗类⽅法时,先执⾏⽗类的⽅法,再去执⾏⼦类的⽅法。
重写:
重写只是对⽅法⾥⾯的功能重新做了编写,并没有对⽅法的参数进⾏添加,改变,删除。重写是⾯向对象的概念  举例:重写Show⽅法
1. public class Person
2. {
3. public virtual void Show(string name, string school, string Class)
4. {
5. Console.WriteLine("我在{0}学习",Class);
6. Console.WriteLine("我叫{0}.我毕业与{1}",name,school);
7. }
8. }
9.
0. public class Studnet : Person
2. public override void Show(string name, string school, string Class) //重写了⽗类的ShowME⽅法
3. {
4. Console.WriteLine("姓名{0},毕业学校{1},曾读班级{2}",name,school,Class);
5. }
6. }
writeline方法属于类17.
18.
9. class Program
0. {
1. static void Main(string[] args)//主函数
2. {
3. Studnet stu = new Studnet();
4. stu.Show("⼩王","家⾥蹲⼤学","泡妹(1)班");
5. Console.ReadLine();
6. }
7. }
8. #endregion
实现结果:
姓名⼩王,毕业学校家⾥蹲⼤学曾读班级lol最强王者班        (没有运⾏⽗类中⽅法)
重写的⽗类⽅法时,必须指明被重写的⽅法是虚⽅法(virtual关键字)。在⼦类重写⽗类⽅法时必须有重写关键字(override)这样才能重写⽗类的⽅法
重载:
重载除了⽅法名不能被改变为另外什么都能重新定义(⽅法作⽤域、返回类型、⽅法体、⽅法参数) (当然也可以只改变部分内容⽐如只改变⽅法体,不改变参数)重载是⾯向过程的概念
重载Show⽅法
测试1:
1. #region 重载Show⽅法
2. public class Person
3. {
4. public void Show()
5. {
6. Console.WriteLine("我是⽗类的⽅法");
7. }
8. }
9.
0. public class Studnet : Person
1. {
2. public new void Show( )//此处不写new会出现编译提⽰,但是不算出错。
3. {
4. Console.WriteLine("我是⼦类的⽅法");
5. }
6. }
17.
8. class Program
9. {
0. static void Main(string[] args)//主函数
1. {
2. Studnet stu = new Studnet();
3. stu.Show();
4. Console.ReadLine();
5. }
6. }
7. #endregion
实现结果:
我是⼦类⽅法      (没有运⾏⽗类中⽅法)
测试2:
1. #region 重载Show⽅法
2. public class Person
3. {
4. public void Show(string name, string school, string Class)
5. {
6. Console.WriteLine("我在{0}学习", Class);
7. Console.WriteLine("我叫{0}.我毕业与{1}", name, school);
8. }
9. }
10.
1. public class Studnet : Person
2. {
3. public new void Show(string name)//这个⼦类重写⽗类⽅法,除了⽅法名没变其他都变了,再使⽤new会有编译提⽰,但不算出错,
可以不写new了
4. {
5. Console.WriteLine("姓名{0}", name);
6. }
7. }
18.
9. class Program
0. {
1. static void Main(string[] args)//主函数
2. {
3. Studnet stu = new Studnet();
4. stu.Show("⼩王");
5. Console.ReadLine();
6. }
7. }
8. #endregion
实现结果:
姓名⼩王
⼦类重载⽗类⽅法,⼦类必须指定重载的关键字(new),⽽⽗类被重载的⽅法则可以不⽤关键字(virtual)。重载⼀个⽅法,是对⼀个⽅法重新进⾏了编写从⽅法的参数到⽅法体,唯独⽅法的名称没有进⾏改变。重载也可以对原来没有返回类型的⽅法(void),改变为有返回类型的⽅法。总体来讲,重载除了⽅法名不能被改变,另外什么都能重新定义(⽅法作⽤域、返回类型、⽅法体、⽅法参数)

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。