虚方法【只有虚方法或者抽象方法才能被子类方法重写】
来源:互联网 发布:mysql update join on 编辑:程序博客网 时间:2024/04/27 20:28
<1>
当子类重写了父类的同名虚方法后,当我们让父类变量执行这个子类对象的时候,通过这个父类变量调用这个虚方法,调用的仍然是父类的。只不过父类的虚方法被子类覆盖带哦了。所以实际上调用的是子类的
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace Test{ public class person { public virtual void Sing() { Console.Write("我是父类方法!"); } } public class Student:person { public override void Sing() { Console.Write("我是子类方法,我覆盖了父类同名方法!"); } } class Program { static void Main(string[] args) { person p1 = new person(); p1.Sing(); //输出:我是父类方法! Student s1 = new Student(); s1.Sing();//输出:我是子类方法,我覆盖了父类同名方法! //当子类重写了父类的同名虚方法后,当我们让父类变量执行这个子类对象的时候,通过这个父类变量调用这个虚方法,调用的仍然是父类的。只不过父类的虚方法被子类覆盖带哦了。所以实际上调用的是子类的 person p2 = new Student(); p2.Sing();//输出:我是子类方法,我覆盖了父类同名方法! Console.ReadKey(); } }}
using System;using System.Collections.Generic;using System.Linq;using System.Text;namespace Test{ //从设计角度考量,通常将子类中共有的但却容易变化的特征抽取为虚函数在父类中定义,而在子类中通过覆写来重新实现其操作。 class A { public virtual void MyMthod() //虚方法可以有方法体,而抽象方法不可以有。 { Console.WriteLine("我是一个虚方法"); } } class B : A { public override void MyMthod() //重写父类中的虚方法 { Console.WriteLine("我重写了父类的虚方法"); } } class C : A //C类继承了A类。它可以override重写父类中的虚方法也可以不重写 { public void Sum(int a, int b) { Console.WriteLine(a + b); } } class InheritanceTest1 { static void Main(string[] args) { B b = new B(); b.MyMthod(); //输出:我重写在父类的虚方法 A a = new A(); a = b; //将变量a指向变量b指向的对象 a.MyMthod(); //所以这里同样调用的也是B类里的MyMthod()方法。所以输出:我重写在父类的虚方法 C c = new C(); c.MyMthod(); //因为C类没有重写父类的虚方法。所以这里调用的是父类的MyMthod()方法,所以这里输出:我是一个虚方法 Console.ReadKey(); } }}
<2>虚方法实例
using System;using System.Collections.Generic;using System.Linq;using System.Text;namespace Test{ //从设计角度考量,通常将子类中共有的但却容易变化的特征抽取为虚函数在父类中定义,而在子类中通过覆写来重新实现其操作。 class Person { public virtual void SayHello() //虚方法可以有方法体,而抽象方法不可以有。 { Console.WriteLine("我是一个人,我会说话"); } } class Boy : Person { public void Features() { Console.WriteLine("我有JJ"); } } class Girl : Person //Girl类继承了Person类。它可以override重写父类中的虚方法也可以不重写 { public void Features() { Console.WriteLine("我有胸部"); } } class 残疾人 : Person { public override void SayHello() //因为这里子类有特殊需求。所以这里重写了父类的虚方法。 { Console.WriteLine("我嗓子哑了,不会说话了"); } } class InheritanceTest1 { static void Main(string[] args) { Boy boy = new Boy (); boy.SayHello(); //因为我是人,所以我有人共有的说话的能力 boy.Features(); //因为我是男的,我的特征是长了JJ Girl girl = new Girl(); girl.SayHello(); //因为我是人,所以我有人共有的说话的能力 girl.Features(); //因为是我女的,我的特征是长了胸部 残疾人 c = new 残疾人(); c.SayHello(); //因为我现在嗓子哑了,所以我不能说话了。 Console.ReadKey(); } }}
0 0
- 虚方法【只有虚方法或者抽象方法才能被子类方法重写】
- java_静态方法能否被子类重写
- 调用被子类重写的方法
- 虚方法、重写方法和抽象方法
- java父类调用被子类重写的方法
- 父类的静态方法能否被子类重写
- 父类的静态方法能否被子类重写
- 父类构造器调用被子类重写的方法
- 关于父类静态方法能不能被子类重写详细
- new 修饰符、虚方法、重写方法、抽象方法
- C#----虚方法、重写方法和抽象方法
- 方法重写或者方法覆盖
- C# 抽象类 虚方法 抽象方法
- java抽象类。抽象类里面的抽象方法必须被子类全部复写
- 大龙的学习笔记之“虚方法,抽象方法,重写,抽象类,接口”
- 方法重写,抽象方法必须重写,抽象类。super.父类里面的方法调用方法。
- C#之抽象类、虚方法、重写、接口、密封类
- 黑马程序员--抽象类虚方法及重写
- Android Fragments详解六:处理fragmenst的生命周期
- Python 类继承,__bases__, __mro__, super
- oracle主机ip修改无法正常启动,报错:ORA-00600:internal error code
- java设计模式之中介者模式
- HDU 5008 Boring String Problem 后缀数组
- 虚方法【只有虚方法或者抽象方法才能被子类方法重写】
- 常用代码段Android Shortcut操作(快捷方式)
- 【北京站】IT运维免费培训火爆进行时,还有惊喜礼品哦~
- poj 2082——Terrible Sets
- 创建指定时间段内的日历信息
- 恢复出厂设置壁纸偏移patch
- 储存器-大端模式与小端模式
- IOS判断是否有效银行卡号
- 教育行业OA办公系统