什么是多态
 
一句话解释,同一种事物表现出的多种形态。
看完以后,应该还是蒙的,还是看代码吧。。
现有Person类,Student类,Teacher类
其中Person类是Student和Teacher类的父类。换句话说,Student类和Teacher类都继承自Person类。
在Person类中有一个SayHi方法,Student和Teacher的SayHi方法肯定是不一样的。
 
现要求在一个静态方法中,他的形参是Person p,实参可能是Student类或者是Teacher类,在函数内部通过调用p.SayHi()来达到调用其不同子类的不同SayHi方法。
如果实现了上面的要求,可以说就是多态的实现。
 
三种方式实现多态
 

通过虚方法

 
//person类,父类
class Person
{
public virtual void SayHi()
{
Console.WriteLine(“我是Person类中的SayHi方法”);
}
}
//student类,子类
class Student : Person
{
public override void SayHi()
{
Console.WriteLine(“我是Student类中的SayHi方法”);
}
}
//Teacher类,子类
class Teacher : Person
{
public override void SayHi()
{
Console.WriteLine(“我是Teacher类中的SayHi方法”);
}
}
 
通过抽象类
 
//person类,父类
abstract class Person
{
public abstractvoid SayHi();
}
//student类,子类
class Student : Person
{
public override void SayHi()
{
Console.WriteLine(“我是Student类中的SayHi方法”);
}
}
 
//teacher这里就不写出来了
 
通过接口

 
public interface IPerson
{
void SayHi();
}
 
class Student : IPerson
{
public void SayHi()
{
Console.WriteLine(“我是Student类中的SayHi方法”);
}
}
 
通过虚方法实现多态的完整代码
 
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
 
namespace 多态的实现
{
class Program
{
static void Main(string[] args)
{
Student stu = new Student();
Teacher tea = new Teacher();
Fun(stu);
Fun(tea);
 
Console.ReadKey();
}
 
static void Fun(Person p)
{
p.SayHi();
}
}
 
class Person
{
public virtual void SayHi()
{
Console.WriteLine("我是Person类中的SayHi方法");
}
}
 
class Student : Person
{
public override void SayHi()
{
Console.WriteLine("我是Student类中的SayHi方法");
}
}
 
class Teacher : Person
{
public override void SayHi()
{
Console.WriteLine("我是Teacher类中的SayHi方法");
}
}
}
 
运行结果
我是Student类中的SayHi方法
我是Teacher类中的SayHi方法
 
 
结束语
 
写这篇随笔的目的是出于锻炼自己的表达能力和思维逻辑能力的,若给你后面的学习带来误解请谅解。
 
感谢博客园
感谢黑马训练营
2014/1/17 15:00

C#基础|面向对象之多态的更多相关文章

  1. 07JAVA基础面向对象-继承/多态

    一.继承 1.概念 子类的共性 重用现有类并在此基础上进行扩展 public class 子类 extends 父类{} 2.继承中的成员访问 成员变量 成员方法 局部->本类中成员变量-> ...

  2. python基础--面向对象之多态

    # 多态是指一类事物有多种行态, # 例如:动物有多种形态:人,狗,猫 # 他们有一些共同的特征:吃,喝,拉,撒 # 多态性是指在不考虑实例类型的情况下使用实例 # 对同一事物不同的类,对象有不同的响 ...

  3. Java基础-面向对象第三大特性之多态(polymorphism )

    Java基础-面向对象第三大特性之多态(polymorphism) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.多态概述 多态是继封装,继承之后,面向对象的第三大特性,多态的 ...

  4. C#基础-----面向对象

    C#基础-----面向对象(一) 分类: C#基础2015-06-08 14:10 2人阅读 评论(0) 收藏 举报 1,面向对象 什么是面向对象?一个分析问题的方式(增强了程序的可扩展性) 几个名词 ...

  5. python基础——面向对象编程

    python基础——面向对象编程 面向对象编程——Object Oriented Programming,简称OOP,是一种程序设计思想.OOP把对象作为程序的基本单元,一个对象包含了数据和操作数据的 ...

  6. Python_day8_面向对象(多态、成员修饰符、类中特殊方法、对象边缘知识)、异常处理之篇

    一.面向对象之多态 1.多态:简而言子就是多种形态或多种类型 python中不支持多态也用不到多态,多态的概念是应用与java/C#中指定传参的数据类型, java多态传参:必须是传参数的数据类型或传 ...

  7. 第八章:Python基础の面向对象(二)

    本課主題 面向对象的多态 面向对象的成员 成员修饰符 特殊成员 面向对象其他应用 异常处理 设计模式与单例模式 面向对象的多态 指定参数类型只是多态的一种表现 另外一种是允许自己类型和自己的子类型(典 ...

  8. 第二十五节:Java语言基础-面向对象基础

    面向对象 面向过程的代表主要是C语言,面向对象是相对面向过程而言,Java是面向对象的编程语言,面向过程是通过函数体现,面向过程主要是功能行为. 而对于面向对象而言,将功能封装到对象,所以面向对象是基 ...

  9. Java基础-面向对象第二特征之继承(Inheritance)

    Java基础-面向对象第二特征之继承(Inheritance) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.继承的概述 在现实生活中,继承一般指的是子女继承父辈的财产.在程序 ...

随机推荐

  1. 带有可点击区域的图像映射:HTML <map> 标签

    实例 带有可点击区域的图像映射: <img src="planets.jpg" border="0" usemap="#planetmap&qu ...

  2. 关于SWT的线程问题

    大部分情况下,GUI界面编程是不用考虑线程问题的,SWT已经帮助我们隐藏了底层的线程调用. 但是一些特殊应用的实现,却不得不涉及SWT线程编程.比如说当进度条的例子(以后要加上,现在还没有做,没有总结 ...

  3. [转载]PHP 字符串替换中文

    $a = "Car 神"; $result = preg_replace('/([\x80-\xff]*)/i','',$a); var_dump($result); 参考链接:p ...

  4. 简单的ROT13码编码与解码

    ROT13码意思是将字母左移13位.如'A' ↔ 'N', 'B' ↔ 'O','V' ↔ 'I'. 下面实现ROT13码的解码. function rot13(str) { var arr = [] ...

  5. TFS2013 安装出现TF400102错误解决

    我是参照:http://www.cnblogs.com/zhibincai/archive/2013/11/25/3442285.html 进行安装的windows 2012 + sql 2012 S ...

  6. PHP与Java使用des加密通讯

    http://www.pocketdigi.com/20121112/940.html 原文:http://toptulip.iteye.com/blog/780309 使用php加密字符串,生成密文 ...

  7. zxing.dll生成条码

    引入zxing.dll using System; using System.Drawing; using ZXing.QrCode; using ZXing; using ZXing.Common; ...

  8. 【html】【8】div布局[子div在父div居底]

    从今天起 开始细话div布局   思路及要点: 父div的位置设置成相对的,即“position: relative;”. 而子div的位置设置成绝对的,并且下边缘设为0,即“position: ab ...

  9. ajax和jsonp的封装

    一直在用jQuery的ajax,跨域也是一直用的jQuery的jsonp,jQuery确实很方便,$.ajax({...})就可以搞定. 为了更好的理解ajax和jsonp,又重新看了下书,看了一些博 ...

  10. JavaScript中,按值传递与按地址(引用)传递。

    JavaScript中,数字型,字符串,布尔型等基本类型,传递给变量时,传递方式为按值传递,这个很好理解,不做多解释. 而令人有所疑惑的,是数组,对象等引用类型传递给变量是,传递方式为按地址传递.此处 ...