什么是多态
 
一句话解释,同一种事物表现出的多种形态。
看完以后,应该还是蒙的,还是看代码吧。。
现有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. show variables 详解

    back_log MySQL主线程检查连接并启动一个新线程这段时间内,可以设置多少个请求可以被存在堆栈中 connect_timeout 连接超时 检测方法nmap -p3306 数据库ip dela ...

  2. HTTP层 —— 验证

    1.简介 Laravel 提供了多种方法来验证应用输入数据.默认情况下,Laravel 的控制器基类使用ValidatesRequests trait,该trait提供了便利的方法通过各种功能强大的验 ...

  3. react ie10下报错

    解决办法: 加 promise polyfill 参考地址:http://hao.jser.com/archive/12066/

  4. 【MINA】用protobuf做编解码协议

    SOCKET协议 支持java serial 与 AMF3的混合协议,目前没有基于xml 与 json的实现. 协议说明: * 9个字节协议头+协议体. * * 协议头1-4字节表示协议长度 =协议体 ...

  5. Fragment的数据传递

    开发之中用到的Fragment的次数越来越多,很多小的项目都已经直接在使用Fragment作为Activity的载体来切换页面.而在开发之中页面的切换我们最关心的问题就是数据的传递了.今天我们主要来研 ...

  6. linux运维常用命令

    1.linux启动过程 开启电源 --> BIOS开机自检 --> 引导程序lilo或grub--> 内核的引导(kernel boot)--> 执行init(rc.sysin ...

  7. 你所不知道的Html5那些事(一)

    文章简介:       关于html5相信大家早已经耳熟能详,但是他真正的意义在具体的开发中会有什么作用呢?相对于html,他又有怎样的新的定义与新理念在里面呢?为什么一些专家认为html5完全完成后 ...

  8. Android系统简介(中):系统架构

    Android的系统架构栈分为4层,从上往下分别是Applications.Application framework.Libraries  & Android Runtime.Linux  ...

  9. Array.splice返回值是数组

    import flash.display.MovieClip; import flash.display.DisplayObject; var m:MovieClip = new MovieClip( ...

  10. JavaScript中关于创建对象的笔记

    1,最基本的两种创建对象的方式:构造函数|| 字面量 构造函数: var person = new Object(); person.name = "chen1zee1"; per ...