1.什么是抽象类

1.1虚方法是用virtual修饰,在子类中用override进行重写

1.2虚方法是一个方法,放在类里面(可以再下面的代码中看到)

1.3虚方法可以 重写,也可以不重写(这个可以再下面的代码中看到)

2.多态的实现

2.1什么都不说了,直接上代码,然后我在解释吧

//先在命名空间下定义一个类,类里面放虚方法
class Person
{
//类是指具有统一特征和行为的抽象,比如说电脑
//对象是类的具体,比如说这个电脑,你眼前的这个电脑,具体的这个电脑
//类中可以有字段,属性和方法
private string _name; //字段
public string name//属性
{
get
{
return _name;
}
set
{
_name = value;
}
}
private float _height;
public float height//属性
{
get
{
return _height;
}
set
{
_height = value;
}
}
private int _age;
public int age//属性
{
get
{
return _age;
}
set
{
if(age<0)
{
_age = 0;
}
_age = value;
}
}
private char _sex;
public char sex
{
get
{
return _sex;
}
set
{
if(sex == '女'||sex == '男')
_sex = value;
else
_sex = '男';
} } public virtual void say()//虚方法
{
Console.WriteLine("你好,我是一个人类,我叫{0}",_name);
} //在定义一个Teacher类,继承Person,在子类中重写虚方法
class Teacher:Person
{
private string _address;
public string address//在子类中新增加的属性
{
get
{
return _address;
}
set
{
_address = value;
}
}
public override void say()//虚方法重写
{
Console.WriteLine("我是一个老师,我叫{0}",name);
} //在定义一个Student类,继承Person,在子类中重写虚方法
class Students:Person
{
private int _stuId;
public int stuId
{
get
{
return _stuId;
}
set
{
_stuId = value;
}
}
// public override void say() //虚方法可以重写,也可以不重写
// {
// Console.WriteLine("大家好,我是一名学生,我叫{0}",name);
// }
}

2.2接下面来看看上面的代码,至于具体的语法这里就不细说了,都是基础的,今天主要看一下虚方法实现多态, 定义一个父类变量Person  p= new Students();     p = new Teacher();

在这里我们可以运行代码看到,Person的对象p可以表现出Students类的特征或者Teacher的一些特征,这就是多态,子类表现出不同的形态.

2.2.1 使用多态的时候,系统先检测父类中的方法是否有virtual关键字,即检查是否重写,如果没有重写直接调用父类中的方法,如果重写了,就会转到相应的子类中调用重写的方法

2.2.2 在子类中新添加的属性,方法等,在用虚方法实现多态的时候,是调用不到的, 对于这个个人是这样理解的,因为子类是继承与父类的,所以子类里面的一些属性,父类里面是不存的,这样的话,在创建出子类对象然后转化为父类的时候,一些属性就用不了了

2.2.3 父类里面先装了学生类,然后然后又装了老师类,  装了那个类的对象,父类就会表现是那个类的特征,从而实现多态

Csharp多态的实现概述

Csharp多态的实现(虚方法)的更多相关文章

  1. c# 多态实现_虚方法

    实现方法: 虚方法, 抽象类, 接口 1.虚方法 将父类的方法标记为虚方法,使用关键字virtual,这个方法可以被子类重新写一遍. 在父类的方法前面加上一个virtual,在子类的方法前面加上一个o ...

  2. c# 多态的美丽(虚方法、抽象、接口实现)

    面向对象3大特性:封装.继承.多态. 面向对象2大原则: 1)里氏替换原则:子类可以给父类,父类不能赋给子类. 2)开放封闭原则: 封装变化,降低耦合.(对扩展开放,对修改封闭) ********** ...

  3. C#多态联系之虚方法

    class Class1 { static void Main(string[] args) { YuanGong yg = new YuanGong(); JingLi jl = new JingL ...

  4. Csharp多态的实现概述

    (1)什么是多态, 多态就是一个类表现出多种不同的形态, 他的核心是子类对象作为父类对象使用 (2)怎么实现多态, 在Csharp中,可以用接口, 虚方法, 抽象类实现多态,当然,不管是这三种的那一个 ...

  5. 【M24】了解虚方法、多继承、虚基类、RTTI的成本

    1.编译器必须实现出C++语言的特性.一般情况下,我们只需要使用这些特性就好了,不需要关心内部的实现细节.但是,有些特性的实现,会对对象的大小和成员方法的执行速度造成影响.因此,有必要了解内部实现的细 ...

  6. C# 工厂模式+虚方法(接口、抽象方法)实现多态

    面向对象语言的三大特征之一就是多态,听起来多态比较抽象,简而言之就是同一行为针对不同对象得到不同的结果,同一对象,在不同的环境下得到不同的状态. 实例说明: 业务需求:实现一个打开文件的控制台程序的d ...

  7. 《转》 浅谈C# 多态的魅力(虚方法,抽象,接口实现)

    前言:我们都知道面向对象的三大特性:封装,继承,多态.封装和继承对于初学者而言比较好理解,但要理解多态,尤其是深入理解,初学者往往存在有很多困惑,为什么这样就可以?有时候感觉很不可思议,由此,面向对象 ...

  8. C#属性-索引器-里氏替换-多态-虚方法-抽象-接口-泛型-

    1.属性 //属性的2种写法 public class person { private string _name; public string Name { get { return _name; ...

  9. C#-面向对象的三大特性——多态(虚方法与重写、抽象类、接口)

    多态 同一操作作用于不同的对象,可以有不同的解释,产生不同的执行结果.在运行时,可以通过指向基类的指针,来调用实现派生类中的方法. 编译时的多态性:编译时的多态性是通过重载来实现的.对于非虚的成员来说 ...

随机推荐

  1. CocoaPods的安装及安装出现问题的处理

    ocoaPods安装分两步:第一步.修改本机的Ruby环境:第二步.安装. 第一步:步骤1.打开终端输入   gem sources -l   查看本机的Ruby环境:若显示“https://ruby ...

  2. LightOJ - 1422 Halloween Costumes (区间dp)

    Description Gappu has a very busy weekend ahead of him. Because, next weekend is Halloween, and he i ...

  3. iOS开发之GCD使用总结

    GCD是iOS的一种底层多线程机制,今天总结一下GCD的常用API和概念,希望对大家的学习起到帮助作用. GCD队列的概念 在多线程开发当中,程序员只要将想做的事情定义好,并追加到DispatchQu ...

  4. OC 语法基础一

    1.判断字符串开头 或 结尾 测试字符串是否以aString开始 - (BOOL)hasPrefix:(NSString *)aString; 测试字符串是否以aString结尾 - (BOOL)ha ...

  5. VS2010中经常使用的快捷键

    1. 格式化对齐:Ctrl+K+F 2. 智能感知:Ctrl+J: 3. 智能感知显示參数信息:Ctrl+Shift+空格: 4. 检查括号匹配(在左右括号间切换): Ctrl +] 5. 选中从光标 ...

  6. AngularJS初始用之 中间件 connect .static 静态文件不能找到

    学习心得,软件更新太快,学习不能照书本. 在学习搭建Nodejs服务器时,掉坑了啦,太坑了,对于什么都不知道的初学者,开门就是坑...,怎么坚持学下去... 还好,现在的世界很大,如果你发现自己不是犯 ...

  7. bootstrap的导航改造

    在使用bootstrap制作后台时用到了响应式导航条,其中dropdown组件更是用的比较多,用的多需要点击的就多,dropdown默认鼠标左键单击才展开,如果使用鼠标放上去(hover)就展开则会省 ...

  8. Oracle基本代码学习

    /*------------Orcale函数----------------*/ 1.字符函数 LOWER()小写UPPER()大写INITCAP()把第一个字母大写CONCAT()字符串的连接(也可 ...

  9. 状态压缩DP------学习小记

    状态DP主要用的还是DP思想,顾名思义,加了一个状态,主要是用来求状态个数的. 状态是用二进制数来表示的,也就是用0或1来表示,每一行有一个状态数,就是由这一行的0或1组成的,首先我们要获得每行的状态 ...

  10. JVM学习之实例分析JVM安全体系

    转自:http://www.importnew.com/17093.html,感谢分享 类加载器的作用就是将真实的class文件根据位置将该Java类的字节码装入内存,并生成对应的Class对象.用户 ...