c# 基础加强--多态I
来源:互联网 发布:图书借阅软件 编辑:程序博客网 时间:2024/04/20 15:47
一、隐藏基类方法:new
class MyBase { public void Func() { Console.WriteLine("俺是父类"); } } class MySub : MyBase { /* * 子类与父类方法同名的时候,建议加上new标记 * 在使用对象的时候,如果是new的父类对象,没有什么异常 * 如果new的是子类对象,看其当前类型,由当前类型决定调用重名方法时,执行的是父类还是子类的方法 */ public new void Func() { Console.WriteLine("我是子类"); } }
二、重写基类方法 virtual override
// 将父类方法标记为virtual,表示可以被重写 // 将子类方法标记为override,表示为重写基类方法 class USBlei { public virtual void USB() { Console.WriteLine("我是一个USB协议"); } } class USB灯:USBlei { public override void USB() { Console.WriteLine("灯亮了"); } } class iPhone : USBlei { public override void USB() { Console.WriteLine("充电了"); } } class Udisk : USBlei { public override void USB() { Console.WriteLine("传数据"); } }
隐藏基类 与 重写基类 的前提: 是子类继承父类,且有相同的方法(非重载)
有关new 与 override的区别:new为隐藏基类方法,看实际定义类型来决定调用方法;override 为重写基类方法,调用最新方法。父类方法中没有加 virtual修饰符,则子类不能加 override修饰符对父类方法进行重写。
如:
USBlei usbLight = new USB灯();
usbLight.USB();
USBlei usbiPhone = new iPhone();
usbiPhone.USB();
USBlei usbDisk = new Udisk();
usbDisk.USB();
Console.ReadKey();
执行结果为:
灯亮了
充电了
传数据
MyBase mb = new MySub()
mb.Func();
执行结果为:
俺是父类
MySub sb =new MySub()
sb.Func()
执行结果为:
俺是子类
三、多态的前提:继承 与 里氏转换原则。
四、抽象方法 abstract :不用写方法体,或者根本不知道怎么写方法体;没有方法体,就没有大括号。
1、抽象方法必须存在于抽象类中,抽象类不能实例化。
2、抽象方法的定义: 访问修饰符一般是public,不允许private;
方法是可以带参数。public abstract void Func();
3、子类必须实现父类的所有抽象方法,除非子类也是抽象类;其实现方法为:
public override void Func()
{
Console.WriteLine("实现了父类的抽象方法");
}
4、class MySub:MyBse光标在此处时,按下shift + alt + f10 再敲回车,自动补全子类实现基类的抽象方法。
五、抽象类:
1、不能实例化;
2、抽象类就是一般类多了几个抽象的成员;
3、定义:
abstract class MyAbs
{
public abstract void Func();
//凡是与方法有关的都可以作为抽象成员
//以下是四种抽象成员
//可读可写的抽象属性
public abstract string Name //如果不加abstract ,则为默认属性
{
get;
set;
}
public abstract string Name
{
get;
}
public abstract string Name
{
get;
}
//索引器(带参数的属性)、事件的声明(一个私有的委托变量加上两个方法,类似于字段与属性的关系)
}
4、子类的实现代码如下:
class MySub : MyAbs { public override void Func() { Console.WriteLine("实现了抽象方法"); } public override string Name { get; set; } public override string Name1 { get { return "123"; } } public override string Name2 { set { this.Name = value; } } }
- c# 基础加强--多态I
- c#基础加强--多态II(接口)
- C#基础加强--字符串
- c#基础加强--集合
- C#基础加强
- c#基础加强
- 复习 c#基础加强
- c#基础加强2
- C#基础加强
- C#基础加强内容图解
- C# 基础加强(七) 接口
- 基础加强-13-文件导航、I/O
- C#基础加强--继承中的构造方法
- C# 基础加强(三) 虚方法:virtual
- 基础加强
- 基础加强
- 基础加强
- c#基础加强--类与成员的访问修饰符
- socket 与tcp/ip
- C++第13周报告(二)定义自定义函数,计算sin和cos的近似值
- C++代码优化[转摘]
- C++第13周报告(三)编制一个三角函数表
- js中appendChild()用法
- c# 基础加强--多态I
- 创业公司感悟录之十个提醒(摘自 李天平的博客)
- undo表空间切换
- Windows多显示器编程--VC
- strrchr()——查找字符串中最后出现某个字符的地方
- ISO
- Android中打包含有Activity以及资源文件的jar包在工程中调用
- cocos2d-x学习笔记(三)让精灵按照自己设定的运动轨迹行动(曲线移动)。(以椭圆轨迹为例)。
- android.content.res.Resources$NotFoundException: String resource ID #0x1