• 面向对象---4


    面向对象三大特性:封装、继承、多态
    一、封装:
        字段(成员变量)    属性    方法(成员函数)    构造函数
    实例
    静态

    二、继承:单继承。
    (一)什么是继承?
    1.父类成员会派生给子类。
    2.子类可以扩展父类。
    3.子类可以替代父类。    子类对象 is a 父类

    (二)继承的语法:
    class 子类名: 父类名
    {
    }

    (三)继承的规则:
    1.字段的继承
    2.属性的继承
    3.方法的继承
    4.构造的继承

    三、多态:
    (一)编译多态(静态多态):方法的重载来实现。
    (二)运行多态(动态多态):继承和重写来实现。
    运行多态就是在继承的基础上实现。
        父类引用指向子类的实例。

    例子:吃饭。喂动物。

    四、抽象类:abstract
    抽象方法:只有方法的声明,没有方法的实现。abstract
    public string SetName();
    抽象属性:只有属性的声明,没有属性实现。
    public string Name
    {
        get;
        set;
    }
    抽象方法(属性)与抽象类的关系:

    1.有抽象方法(属性)的类肯定是抽象类。
    2.抽象类不一定有抽象方法(属性)。

    接口:只有方法的声明、属性的声明。没有实现,也没有成员变量。
    语法:
    定义接口:
    interface 接口名
    {
        返回类型 方法名();
        属性类型 属性名
        {
            get;
            set;
        }
    }
    实现接口:
    class 类名:接口名,接口名...
    {
    }
    interface 接口名:接口名,接口名...
    {
    }
    接口的实现可以实现多个接口。
    每一个类只能有一个父类,但可以同时实现多个接口。
    例:
        interface Openable
        {
            void Open();
        }

        class Window : Openable
        {
        }

    接口:制定规则。相关的类只要实现接口,就是该接口下的一个子类。其它设备或程设在调用的时候,只要基于接口进行调用即可,相应的设备或程序就会被调到。

    *************接口****************

    namespace ConsoleApplication1
    {
        interface IUSB
        {
            void Start();
            void Stop();
        }
    }

    ************继承子函数**************

    namespace ConsoleApplication1
    {
        class UDisk:IUSB
        {
            public void Start()
            {
                Console.WriteLine("U盘启动了,可以读写数据了。");
            }

            public void Stop()
            {
                Console.WriteLine("U盘安全退出了。");
            }
        }
    }

    namespace ConsoleApplication1
    {
        class KaoQinJi:IUSB
        {
            public void Start()
            {
                Console.WriteLine("考勤机启动。。。。");
            }
            public void Stop()
            {
                Console.WriteLine("考勤机安全退出");
            }
        }
    }

    ******主函数*************

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using HQ.Test.CYL;

    namespace ConsoleApplication1
    {
        class Program
        {
            static void Main2222(string[] args)
            {
                Computer c = new Computer();
                Mouse m = new Mouse();
                UDisk u = new UDisk();
                c.StartUSB(m);
                c.StartUSB(u);
                KaoQinJi k = new KaoQinJi();
                c.StartUSB(k);

                c.StopUSB(k);

               
            }
        }
    }

    **********调用函数*************
    namespace ConsoleApplication1
    {
        class Computer
        {
            public void StartUSB(IUSB usb)
            {
                usb.Start();
            }
            public void StopUSB(IUSB usb)
            {
                usb.Stop();
            }
        }
    }

    namespace ConsoleApplication1
    {
        class Mouse:IUSB
        {
            public void Start()
            {
                Console.WriteLine("鼠标启动了,可以用鼠标操作电脑了。");
            }

            public void Stop()
            {
                Console.WriteLine("鼠标设备停止了。");
            }
        }
    }

    namespace HQ.Test.CYL
    {
        public class Mouse
        {
            public void Show()
            {
                Console.WriteLine("这不是鼠标,是老鼠!");
            }
        }
    }


    命名空间、项目、程序集。
    (一)命名空间:namespace。
    作用:对类进行逻辑上的分类管理。在同一个命名空间下,类名不许重复的。
    使用:
    1.在代码开头,使用using xxxxx;把命名空间导进来。以后再用该命名空间下的时候,可以省去命名空间。
    2.每次使用类的时候,在此类之前写上命名空间,即使用类的完全限定名。如果所有的不同命名空间中出现了重名的类,在使用类的时候,就需要使用完全限定名。

    命名空间与Java的包是不同的。Java的包,既有逻辑位置也有物理位置。.net的命名空间仅仅是逻辑上的概念。

    如何设置默认命名空间?
    在解决方案管理器的项目图标上右击,选择属性,设置默认命名空间。

    (二)项目
    项目主要是用来管理项目所有的文件的。

    (三)程序集
    就是程序编译运行时的中间代码。.exe或.dll。它们不像C或C++那样编译出来的都是二进制。它是中间代码(IL)
    C#语言是两步编辑:第一步:从源代码编译成IL。第二步:运行的时候是从IL编译成二进制。在运行的内存中我们称之为程序集

  • 相关阅读:
    SpringBoot及Vue3.0 登录验证码实现
    SpringBoot 文件上传、下载、显示
    Redis持久化
    Redis持久化之RDB、AOF详解
    SpringBoot AOP 记录操作日志、异常日志
    JAVA后端《持续集成 持续交付 持续部署》
    MySQL Binlog 介绍
    谷歌浏览器chrome即将在2020年底停止支持flash,我们程序员该怎么办
    年薪170万的阿里P8级员工征婚有感--话说阿里真有钱,这员工要求的条件真多
    为什么百度只抓取了首页而不抓取我的网站的内页的原因分析
  • 原文地址:https://www.cnblogs.com/xianshui/p/4474607.html
Copyright © 2020-2023  润新知