zoukankan      html  css  js  c++  java
  • 步步为营-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();

  • 相关阅读:
    Java基础学习笔记十二 类、抽象类、接口作为方法参数和返回值以及常用API
    Java基础学习笔记十四 常用API之基本类型包装类
    Java基础学习笔记六 Java基础语法之类和ArrayList
    Java基础学习笔记七 Java基础语法之继承和抽象类
    Java基础学习笔记八 Java基础语法之接口和多态
    Java基础学习笔记九 Java基础语法之this和super
    Java基础学习笔记十 Java基础语法之final、static、匿名对象、内部类
    Java基础学习笔记三 Java基础语法
    ssrs 里 表头 分页后显示
    CentOS 部署RabbitMQ集群
  • 原文地址:https://www.cnblogs.com/YK2012/p/6701141.html
Copyright © 2011-2022 走看看