zoukankan      html  css  js  c++  java
  • 面向对象三大特性

     

    面向对象OOP是基于面向过程而言,面向对象简单来说就是将功能封装到对象(数据和操作结合)里,我们面向对象,让对象去完成这些功能。
    万物皆对象。(在我们程序员眼中,一切皆对象)

    理解面向对象:

    经典案例:把大象塞进冰箱
    1>>面向过程的做法:1.打开冰箱门 2.把大象塞进去 3.关闭冰箱门
    当有两个不同的人用不同的方法实现这样的步骤,我们需要为不同的人量身定做不同解决事情的方法。
    2>>面向对象,找个对象帮你做事
    我们把冰箱作为对象,1.冰箱门可以被打开 2.大象可以被塞进去 3.冰箱门可以被关闭(面向对象写出通用的方法,屏蔽了所有人的差异)

    如:关门
    面向过程:
    张三踹开门
    李四轻轻关上了门
    面向对象:关门 门可以被关闭(可以避免上述面向过程的差异)
    总结:从被动方去找对象

    描述对象:描述对象的属性和方法。对象是看得见摸得着的。
    我们把具有相同属性和相同方法的对象进行进一步的封装,得到类的概念。
    类包含:
    Fields 字段(存数据,私有);Methods方法; propertites属性(中间熵,public)

    如:类是一个盖大楼的图纸,对象是盖出来的大楼。类是不占内存的,对象占内存,也就是类的字段占内存

    Person mk=new Person();//自定义类Person
    this._name=‘mk’;//this代表当前类的对象,在这里指mk这个对象

    //Fields
    string _name;
    ///

    /// property 能对字段的取值和赋值进行限定
    ///
    public string Name
    {
    get { return _name; }
    set
    {
    this._name = value;
    }//赋值时,给属性赋值,执行set方法通过value传给字段_name
    }
    int _age;
    public int Age
    {
    get{ return _age;}
    set//赋值时检测形参的数据
    {
    if (value < 0 || value > 100)
    {
    value = 0;//不正常,则给value重新赋值
    }
    _age = value;
    }
    }
    char _gender;
    public char Gender
    {
    get//打印数据(存在字段里)时,检测数据
    {
    if (_gender != '男' && _gender != '女')
    {
    _gender='男';
    }
    return _gender;
    }
    set { _gender = value; }
    }
    当打印(获取)数据时,应该访问属性,因为属性有get,set方法,可以对数据的取值赋值进行检测,如果直接获取字段,则不会执行我们的检测代码
    属性的作用是保护字段,为字段的取值和赋值进行限定。和外界打交道的是属性
    属性的本质:get() ; set() 方法,可读可写

    重写与重载,隐藏的区别:

    1.重写:发生在子类和父类之间,当子类继承父类中的方法时,子类中的方法与父类方法的名称,参数个数,参数类型完全一致时,称子类重写了父类的方法。
    2.重载:一个类中的多个方法的名称相同,参数个数或者参数类型不同,则称为重载方法
    3.覆盖:子类重新实现了父类的方法,而隐藏只是把父类中的方法藏了起来,通过父类的引用来调用这个方法的时候,这个被隐藏的方法就被激活了。

    了解三大特性:封装,继承,多态

    封装
    ---->减少了大量的冗余代码
    ---->封装将复杂的功能封装起来,对外开放一个接口,简单调用即可。
    将描述事物的数据和操作封装在一起,形成一个类;被封装的数据和操作只有通过提供的公共方法才能被外界访问(封装隐藏了对象的属性和实施细节),私有属性和方法是无法被访问的,表现了封装的隐藏性,增加数据的安全性。

    继承–单根性,传递性
    ---->减少了类的冗余代码
    ---->让类与类之间产生关系,为多态打下基础
    若一个新类继承了原有类的属性和方法,并增加了自己的新属性和新方法,称之为派生类,派生类就继承了原有类;当子类继承父类的时候,子类不继承父类的构造函数,但是子类生成对象时(new Student())默认会先执行父类无参的构造函数(实例化对象,让子类可以使用父类的成员),当父类定义有参构造函数时,无参构造函数就会被干掉,这时子类会报错,解决方案是1>在父类重新定义无参构造函数 2>子类的构造函数:base(),调用有参构造函数,函数体中只需初始化特有属性;如果不想执行父类的构造函数,可以通过参数的不同调用父类一个空的构造函数。

    多态
    ----->虚方法 virtual override
    ----->抽象类 abstract override
    ----->接口 interface
    很重要的一个概念,一个接口,多个方法。通过继承实现的不同对象调用相同的方法,进而有不同的行为,实例如下:abstract-override

    抽象父类有方法Body(),子类继承父类重写Body方法,new出不同的对象,这些对象去执行相同的Body方法,有不同的执行结果,这就是多态。上述例子中想要停止这种继承重写,用关键字sealed修饰类即可。

  • 相关阅读:
    vs2005新控件演示系列之 向导《Wizard》
    搬家、钱、欲望、环境与命运
    母版页里面查找Repeater内控件,并构造URL
    恭喜哦!我在这里排名到250了!)(*&^%$#
    sql查询语言[我是网管论坛转载的精华贴]
    WCF 3.5对HTTP编程的增强
    WCF基础知识问与答
    印第安人的灵魂——敏捷回顾
    元数据交换绑定的秘密
    “轻松掌握WCF 帮你找到入门砖”访谈实录
  • 原文地址:https://www.cnblogs.com/1121cyy/p/14233542.html
Copyright © 2011-2022 走看看