步步为营-03-一个经典的多态案例

说明:相信大家都知道一个经典的案例.关于电脑对不同的设备进行读取.

1 定义一个基类(移动存储设备类)其中包括两个虚方法

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Computer
{
   public abstract class MobileDevice
    {
        public abstract void Read();
        public abstract void Write();
    }
}

MobileDevice

2 定义三个类MP3.U盘

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Computer
{
    public class FleshDisk:MobileDevice
    {
        public override void Read()
        {
            Console.WriteLine("U-盘,读数据");
        }

        public override void Write()
        {
            Console.WriteLine("U-盘,写数据");
        }
    }
}

FleshDisk

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Computer
{
    public class MP3 : MobileDevice
    {
        public override void Read()
        {
            Console.WriteLine("MP3,读数据");
        }

        public override void Write()
        {
            Console.WriteLine("MP3,写数据");
        }

        public void Play()
        {
            Console.WriteLine("MP3-播放音乐");
        }
    }
}

MP3

3 定义一个电脑类

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Computer
{
   public class Computer
    {
      public MobileDevice MS { set;get;}
       public void CPUWrite() {
           this.MS.Write();
       }
       public void CPUReader()
       {
           this.MS.Read();
       }
    }
}

Computer

4 接下来在主方法中实现将变得很容易

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Computer
{
    class Program
    {
        static void Main(string[] args)
        {
            //定义子类
            MP3 mp3 = new MP3();
            Computer c = new Computer();
            c.MS = mp3;
            c.CPUWrite();
            c.CPUReader();
            Console.Read();

        }
    }
}

Main

5 而且如果突然来了一个手机类,其余代码几乎不用修改

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Computer
{
    public class TPhone:MobileDevice

    {
        public override void Read()
        {
            Console.WriteLine("手机,读数据");
        }

        public override void Write()
        {
            Console.WriteLine("手机,写数据");
        }
    }
}

TPhone

只要将Main方法中添加

c.MS = new TPhone();

时间: 2024-10-13 12:22:23

步步为营-03-一个经典的多态案例的相关文章

JEECG社区 一个微信教育网站案例源码分享

微信教育网站案例演示: http://t.cn/RvPgLcb 源码分享: http://pan.baidu.com/s/1cUImy 截图演示: JEECG社区 一个微信教育网站案例源码分享,布布扣,bubuko.com

[一个经典的多线程同步问题]总结

针对一个经典的线程同步互斥问题,前面几篇文章提出了四种解决方案:关键段.事件.互斥量.信号量. 下面对这四种解决方案做一个总结,梳理一下知识点: 首先来看下关于线程同步互斥的概念性的知识,相信大家通过前面的文章,已经对线程同步互斥有一定的认识了,也能模糊的说出线程同步互斥的各种概念性知识,下面再列出从<计算机操作系统>一书中选取的一些关于线程同步互斥的描述.相信先有个初步而模糊的印象再看下权威的定义,应该会记忆的特别深刻. 1.线程(进程)同步的主要任务 答:在引入多线程后,由于线程执行的异步

多态案例

多态案例 例一 . class Test1Demo { .         public static void main(String[] args) { .             Fu f = new Zi(); . //f.method(); //编译看左边,运行看右边,左边没有method方法,报错, .             f.show();//编译看左边,运行看右边,父类有show,编译没问题,输出Zishow,如果Zi类没有show方法,则运行时发现子类没有去重写,则直接调用

一个关于类的案例

# -*- coding: utf-8 -*- #python 27 #xiaodeng #http://blog.chinaunix.net/uid-22521242-id-4081674.html #一个关于类的案例 class People(): #定义基本属性 name='' age=0 #定义私有属性,私有属性无法在类的外部直接访问 __weight=0 #定义构造方法 def __init__(self,n,a,w): self.name=n self.age=a self.__we

Java多态案例分析

一.多态的定义 同一事物,在不同时刻体现出不同状态. 例如:水在不同状态可能是:气态.液态.固态. 二.多态前提和体现 1.有继承关系 2.有方法重写 3.有父类引用指向子类对象 三.编译运行原理 1.编译看左边,父类是否有此方法,没有就报错. 2.运行看右边,运行结果一般是右边子类重写后的结果. 四.案例分析 1 package polymorphic; 2 /** 3 * 多态案例1,基础 4 * @author zhongfg 5 * @date 2015-06-16 6 */ 7 int

Servlet以及一个简单的登录案例

1.servlet的概述 就是一个运行在web服务器上的小的java程序,用来接收和响应从客户端发送过来的请求,通常使用http协议 就是sun公司提供的一个动态网页开发技术 作用:用来处理从客户端浏览器发送的请求,并且可以对请求作出响应 编写类实现servlet: public class Demo1 implements Servlet{ @Override /** * 为用户处理请求和响应的方法. */ public void service(ServletRequest req, Ser

[转载]HTML5开发入门经典教程和案例合集(含视频教程)

http://www.iteye.com/topic/1132555 HTML5作为下一代网页语言,对Web开发者而言,是一门必修课.本文档收集了多个HTML5经典技术文档(HTML5入门资料.经典)以及游戏开发案例以及教学视频等,帮助同学们掌握这门重要的技术. 资源名称                                资源地址 WEB新技术:HTML5介绍 http://down.51cto.com/data/385440 HTML5跨平台游戏开发 http://down.51c

一个平面设计师职业规划案例

网页设计师是指精通Photoshop,Coreldraw,Frontpage,Dreamweaver等多项网页设计工具的网页设计人员.网页设计师可以将平面设计中的审美观点套用到网站设计上面来(其区别是动态网页的制作是平面设计不能达到的,它是一种审美方式的延伸). 网页如门面,小到个人主页,大到大公司.大的政府部门以及国际组织等在网络上无不以网页作为自己的门面.当点击到网站时,首先映入眼帘的是该网页的界面设计,如内容的介绍.按钮的摆放.文字的组合.色彩的应用.使用的引导等等.这一切都是网页设计的范

转:一个经典例子让你彻彻底底理解java回调机制

一个经典例子让你彻彻底底理解java回调机制 以前不理解什么叫回调,天天听人家说加一个回调方法啥的,心里想我草,什么叫回调方法啊?然后自己就在网上找啊找啊找,找了很多也不是很明白,现在知道了,所谓回调:就是A类中调用B类中的某个方法C,然后B类中反过来调用A类中的方法D,D这个方法就叫回调方法,这样子说你是不是有点晕晕的,其实我刚开始也是这样不理解,看了人家说比较经典的回调方式: Class A实现接口CallBack callback——背景1class A中包含一个class B的引用b —