• 面向对象设计三大特性


    面向对象设计三大特性

    一、封装

    良好的封装能够减少耦合;类内部的实现可以自由地修改;类具有清晰的对外接口。比如建立一个猫的类,再建立一个狗的类,这样也算封装,只是会出现大量相似代码。

    二、继承

    继承的出现是因为对象类中出现过多重复代码,为解决该问题而建立父类,将这部分代码放进父类中,由子类继承。子类继承父类的所有特性,同时可以定义新的特性。

    如果子类继承于父类,子类拥有父类非private的属性和功能;子类具有自己的属性和功能,即子类可以扩展父类没有的属性和功能;子类还可以以自己的方式实现父类的功能(方法重写)。

    复制代码
    class Animal                              //父类
    {
        protected string name = "";          //字段,修饰符意味子类可以继承
        public Animal(string name)           //构造函数
        {
            this.name = name;
        }
    
        protected int shoutNum = 3;         //属性及其设置方法
    
        public int ShoutNum
        {
            get
            {
                return shoutNum;
            }
            set
            {
                shoutNum = value;
            }
        }
    
        public virtual string Shout()         //父类方法,注意增加的虚拟修饰符代表该方法允许被子类重写
        {
            return "";
        }
    }
    复制代码
    复制代码
    class Cat : Animal                                        //子类,继承自父类
    {
        public Cat(string name) : base(name)                 //继承父类的构造函数,构造函数不能被继承,只能被调用
        { }
    
        public override string Shout()                       //重写父类的方法
        {
            string result = "";
            for (int i = 0; i < shoutNum; i++)
                result += "喵 ";
    
            return "我的名字叫" + name + " " + result;
        }
    }
    复制代码

    继承的优点:代码共享,避免重复,可使得修改或扩展继承而来的实现都较为容易;

    继承的缺点:父类变子类变,继承会破坏包装,父类实现细节暴露给子类,显然是一种类与类之间强耦合的关系。

    总结:继承适用情况是两个类具备‘is-a’的关系时,即完全包含。

    三、多态

    多态表示不同的对象可以执行相同的动作,但要通过自己的实现代码来执行,第二节中的父类和子类的重写方法即是多态的表示。

    virtual关键字可以使用的范围:属性、事件、方法和索引器,但是字段不能虚拟。子类可以选择使用override关键字重写父类的方法。

    复制代码
    private void button1_Click(object sender, EventArgs e)                //客户端调用
            {
                Animal cat ;                                              //声明时要声明父类
                cat =  new Cat("小咪");                                     //实例要实例为子类
                cat.ShoutNum = 5;                                          //执行子类重写后的方法
                MessageBox.Show(cat.Shout());
            }
    复制代码

    四、衍生:重构

    重构都是在程序编写过程中发现大量重复代码,因而对现有代码进行重新编写,提取重复部分融入或新建父类的。在父类中需要子类完全继承的方法不要添加virtual关键字,使其成为普通方法,而需要子类自行定义的方法定义成虚方法。

  • 相关阅读:
    RabbitMq 集群配置
    获取 input 单选框和多选框的值
    js 获取 通过 ”?“ 或者 ”&“ url 传过来参数值
    Java 对文件的读取操作
    java 链接jdbc
    了解EBP寄存器
    节后后遗症
    [转]web service实现原理与异步调用
    Javascript实现无刷新分页
    邮件发送
  • 原文地址:https://www.cnblogs.com/Leo_wl/p/4808868.html
Copyright © 2020-2023  润新知