多态 模拟 移动硬盘 插入电脑 读写,方法1传参,方法2属性赋值

//多态 模拟 移动硬盘 插入电脑 读写,方法1传参,方法2属性赋值
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            //多态 模拟 移动硬盘 插入电脑 读写
            //MobileDisk md = new MobileDisk();//父类抽象类不能实例化,所以实例化子类
            //UDisk ud = new UDisk();
            //Mp3 mp = new Mp3();
            MobileStorage mp = new Mp3();
            Computer cpu = new Computer();//通过属性拿到父类,在外面不能传参数,采用赋值
            cpu.Ms = mp;//表示把插入的MP3赋值给电脑里面的Ms属性
            //cpu.CpuRead(mp);
            //cpu.CpuWrite(mp);
            cpu.CpuRead();//采用属性赋值形式,不用传参数
            cpu.CpuWrite();

            Console.ReadKey();
        }
    }
    /// <summary>
    /// 抽象的父类,可移动存储
    /// </summary>
    public abstract class MobileStorage
    {
        public abstract void Read();
        public abstract void Write();
    }
    public class MobileDisk : MobileStorage
    {

        public override void Read()//override可以重写抽象方法和虚方法
        {
            Console.WriteLine("移动硬盘在读取数据");
        }

        public override void Write()
        {
            Console.WriteLine("移动硬盘在写入数据");
        }
    }
    public class UDisk : MobileStorage
    {

        public override void Read()
        {
            Console.WriteLine("U盘在读取数据");
        }

        public override void Write()
        {
            Console.WriteLine("U盘在写入数据");
        }
    }
    public class Mp3 : MobileStorage
    {

        public override void Read()
        {
            Console.WriteLine("Mp3在读取数据");
        }

        public override void Write()
        {
            Console.WriteLine("Mp3在写入数据");
        }
        public void PlayMusic()
        {
            Console.WriteLine("MP3自己可以播放音乐");
        }
    }

    public class Computer
    {
        //方法2,拿字段存传入的父类参数
        private MobileStorage _ms;

        public MobileStorage Ms//字段封装属性
        {
            get { return _ms; }
            set { _ms = value; }
        }

        public void CpuRead()//方法1,想拿到父类,传参数进来就行,可以传子类进来
        {
            Ms.Read();//方法2,通过属性拿到父类,在外面不用传参数,采用赋值
        }
        public void CpuWrite()
        {
            Ms.Write();
        }

        //public void CpuRead(MobileStorage ms)//方法1,想拿到父类,传参数进来就行,可以传子类进来
        //{
        //    ms.Read();
        //}
        //public void CpuWrite(MobileStorage ms)
        //{
        //    ms.Write();
        //}
    }
}
时间: 2024-12-27 08:45:31

多态 模拟 移动硬盘 插入电脑 读写,方法1传参,方法2属性赋值的相关文章

java-第十三章-类的无参方法(一)-代参方法的编程计算器

package 本章总结; public class A01class { public int ope(int Operator, int num1, int num2) { switch (Operator) { case 1: num1 += num2; break; case 2: num1 -= num2; break; case 3: num1 *= num2; break; case 4: num1 /= num2; break; default: System.out.print

spring的几个传参方法

[email protected] 通过URI template 样式映射时,使用@PathVariable <script type="text/javascript">$('#setButton').click(function() { $("#removeId").val(spId); $("#toolBarForm").attr("action","/test/"+$("#id

(1)构造方法和方法重载 (2)this关键字 (3)方法的传参和递归调用

1.构造方法和方法重载如: Person p = new Person(); - 声明Person类型的引用p指向Person类型的对象 p.show(); - 调用名字为show()的成员方法 1.1 构造方法(重中之重)(1)语法格式 class 类名{ 类名(形参列表){ 构造方法体; } }如: class Person{ Person(){ } } (2)使用方式 a.构造方法的名称与类名完全相同,并且没有返回值类型,连void都不许有: b.当创建新对象时会自动调用构造方法来进行该对

无参方法和有参方法

无参方法 public 返回值 方法名(){ //方法体 } 注意: 如果没有返回值,那么返回值类型是void. 如果有返回值,那么必须用return 返回值,并且该值的数据类型必须是定义方法 时的数据类型. return的作用: a.返回值 b.结束方法.(与break类似)   2.写方法时注意 第一点:定义void为返回值类型时,不能使用return+返回值. 第二点:方法不能返回多个值. 第三点:方法不能嵌套. 第四点:不能在方法外部直接写程序逻辑代码. 有参方法 1.方法的定义 pub

js方法之间的调用之——传参方法

在最近项目需求中发现,完成一些功能的时候总是要调很多结构类似的方法,写起来很繁琐,所以就想写一个“万能”方法,是的代码更简洁.即:把一个方法作为参数传给这个“万能”方法,让它去执行你给定的方法,就类似于ajax中success/error方法传参,总是传入一个方法体. ####1.将方法作为参数 代码: var a = function(){ console.info("我成功执行了..."); } var excuteFunc = function(funcName){ funcNa

wx.navigateBack传参方法

一.传参页面代码 var pages = getCurrentPages();   //当前页面 var prevPage = pages[pages.length - 2];    //上一页面 prevPage.setData({ //直接给上一页面赋值 id:27, }) wx.navigateBack({ //返回上一页面 delta:1, }) 二.接收传参页面代码(代码写在onShow方法内) var that = this; var pages = getCurrentPages(

java 如何将方法作为传参--多态

在前段时研究智能算法时,发现如果使用java进行实现的话,往往具体实现过程差不多,但是适应值函数却根据 研究对象的不同发生很大的改变,这样对代码的维护产生很大的阻碍,于是产生的一个疑问:可不可以将适应值函数 作为参数传入到方法中,根据C/C++的习惯的话,由于指针的存在,可以将函数作为指针传入,由于指针使用的复杂 性以及难维护性,效果一般.如果换一种面向对象的思想,可以想设计一个接口I,这个接口只提供一个方法,那么相 当于可以将接口作为参数传入到方法中,调用时只需要将设计一个类,实现接口I,那么

2016.11.03 1.优化拼接SQL 2.类里面的属性 不传参方法里也可以直接用

string Url = string.Format("{0}/api/sms/v1/s?t={1}&n={2}&m=[{3}]短信:{4}", MainUrl, ApiToken, PhoneNumber, ApiLogo, Content); 用占位符的方法比拼接SQL来的更好 -----------------------------------------------------------------------------------------------

弹出新界面,在新界面执行方法后传参给调用界面,再执行调用界面的方法

需求:收费界面如果按照客户名称来检索,且有重名的话,能弹出多个客户来选择 思路:利用jquery和第三方的js库lhgdialog.min.js(我这里是为了快速.方便.美观.不用考虑兼容性),当点击查询时,调用弹出窗体,弹出窗体引用了一个单独的aspx页面,这个aspx页面将列出查询到的数据列表,然后根据选择不通的数据行,将唯一标识再传给调用页面(主页面),最后执行调用页面(主页面)的方法. 界面效果如下: aspx页面: <script src="JS/jquery-1.10.2.mi