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

    面向对象的编程区别于面向过程的编程,其操作的单元是类,而面向过程操作的单元是方法。即面向过程的编程是由一个又一个的方法组成的。而面向对象的编程是由一个又一个类组成的。相对于面向过程,面向对象的代码复用性更好,代码的隐蔽性更高,并且更加符合人类思维的方式。

      面向对象的最基础的单元就是类。类(Class)是一个抽象的概念,是对某一类事物的描述。例如:猫,狗,人。而对象(object)就是类的实例化。即符合类描述的具体的单个成员。例如我就是Person类实例化的对象。我是符合人描述的具体的单个成员。在创造对象的过程就叫做类的实例化。

      类包含描述某种事物的状态(例如姓名,性别)和行为(唱歌,跳舞,写代码)。

      在.net平台而言,最基本的编程结构就是类类型。正式的说,类是由字段数据(通常叫做成员变量)以及操作这个数据的成员(如构造函数,属性,方法,事件等)所构成的自定义类型。其中字段数据表示状态。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Class Person
    {
            //表示自身状态的字段
        String Name;
        String Sex;
            //表示行为的方法
        Public void Sing();
        Public void Dance();
        Public void Coding();
    }

    面向对象编程(OOP)的三个特性:

    1.封装性

       封装是将对象用户(用你编写的类进行编程的人)不必了解的实现细节隐藏起来的一种语言能力。

    1     //DatabaseReader封装了数据库操作的细节
    2     DatabaseReader dbReader = new DatabaseReader();
    3     dbReader.Open(@"C:AutoLot.mdb");

      和封装编程逻辑紧密相关的概念就是数据的保护概念。理想情况下对象的状态数据都应该是隐蔽的,外部不能直接的访问,只能通过访问函数来进行“有礼貌的访问”。

    2.继承性

      继承指的是基于已有的类型来创建心类的语言能力。通过继承,子类可以继承基类(或称父类)的核心功能,并且扩展了基类的行为。

      

      从图中我们可以看出“矩形是图形,图形是对象”这就构建成了一种“is - a”的关系,Is- a关系又称为继承关系。

    我们会认为Shape定义了许多派生类都公有的成员(颜色,高度)。由于Rectangle扩展了Shape,它也就继承了由ShapeObject定义的核心功能。同时它还有属于自己独特的功能。

      区别于C++C#不支持多重继承的概念(所以引入了接口的概念)继承的一个很大的优点就是提高了代码的复用性,OOP中还有另外的一种形式的代码重用:包含/委托模型(has-a关系,也成聚合)这种重用的形式不是用来建立父类和子类关系的。它意味着,一个类可以定义另一个类的成员变量,并向对象用户间接的公开它的功能。

    例如构建一个汽车(Car)的类,想表达一辆车中有一个(has-a)收音机的概念。让Car继承Radio类显然是不符合逻辑的。需要的是两个类一起合作,其中Car类创建并公开了Radio的功能。

    复制代码
    1 Class Car
    2 {
    3     Radio _Radio;
    4 }
    5 Class Radic
    6 {
    7     
    8 }
    复制代码

    3.多态性

      同一操作作用于不同的对象,可以有不同的解释,产生不同的执行结果,这就是多态性。

      实际上就是同一个类型的实例调用“相同”的方法,产生的结果是不同的。这里的“相同”打上双引号是因为这里的相同的方法仅仅是看上去相同的方法,实际上它们调用的方法是不同的。

      当CirCleRectangle都调用Draw()的时候,看似这两个实例调用了“相同”的方法,但是实际上,它们是调用各自的Draw()方法。所以只是看似相同,实际上是不同的方法。并且产生了不同的执行结果,这就是多态性。

      同时,这里讲的多态性也只是简单的多态性。多态性用来当基类规定好一些实现的方法时,子类只需要重写这些方法就好。这样增强了代码的复用性。

  • 相关阅读:
    LocalDate、LocalTime、LocalDateTime示例
    Instant时间戳示例
    Mybatis面试题
    SpringMVC面试题
    Spring面试题
    redis面试题
    计算机网络面试题
    java集合面试题
    java基础面试题
    MySQL面试题汇总
  • 原文地址:https://www.cnblogs.com/kun-boke/p/5752105.html
Copyright © 2011-2022 走看看