什么是多态
 
一句话解释,同一种事物表现出的多种形态。
看完以后,应该还是蒙的,还是看代码吧。。
现有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. ssh用root直接登录失败的问题

    解决方法: 1) 以root身份,chmod +w /etc/ssh/sshd_config 2) vi /etc/ssh/sshd_config 3) 将PermitRootLogin no改成Pe ...

  2. 我、实战nginx+naxsi(WAF)之一

    差不多,一个星期多的时间都过去了.但是还是感觉时间过的太快,总是不禁的让人长叹一声,关于nginx和(naxsi)WAF这个问题,也算是只走出了第一步,在遇到了各种乱七八糟的错误之后总算是想要静下心来 ...

  3. [引]MSDN Visual Basic 和 C# 中都会用到的编程概念

    本文转自:http://msdn.microsoft.com/zh-cn/library/dd460655.aspx 本节介绍 Visual Basic 和 C# 中都会用到的编程概念. 本节内容   ...

  4. 如何使用gcc编译器

    开始... 首先,我们应该知道如何调用编译器.实际上,这很简单.我们将从那个著名的第一个C程序开始. #include <stdio.h> int main() { printf(&quo ...

  5. php中的匿名函数(Anonymous functions)和闭包函数(closures)

    一:匿名函数 (在php5.3.0 或以上才能使用) php中的匿名函数(Anonymous functions), 也叫闭包函数(closures), 允许指定一个没有名称的函数.最常用的就是回调函 ...

  6. systemverilog interface

    普通的模块使用法:注意我们这里只实现了部分功能....不是完全的读写模块....     module mem_core(   input logic wen,  input logic ren,   ...

  7. Android开发之万能适配器

    ListView.GridView等等非常多的东西都需要适配器.而如果开发一个app每一个listview都有写一个Adapter的话,那还怎么愉快的玩游戏.. 什么是ViewHolider以及的用法 ...

  8. SQL SERVER 与ACCESS、EXCEL的数据导入导出转换

    * 说明:复制表(只复制结构,源表名:a 新表名:b)      select * into b from a where 1<>1 * 说明:拷贝表(拷贝数据,源表名:a 目标表名:b) ...

  9. Latex之CJK中文书签乱码[转]

    在使用CJK宏包编辑中文时,可以使用不同的编码方式,一种是UTF-8格式:另外一种是GBK编码.在使用GBK编码时,生成的PDF格式中的文本是GBK的编码方式,因此大部分不支持GBK编码的PDF阅读器 ...

  10. c# 单例模式[Singleton]之深夜闲聊

    都有点记不起认识单例模式(也有叫单件模式的)是在什么时候了,有时候东西认多了不常用的话也经常抛之脑后甚至逐渐从大脑里被移除.不闲扯了,直接入正题吧. 什么是单例模式? 保证在整个应用程序的生命周期中, ...