• OOP Class具体解释


    对象[编辑]

    对象(Object)是类的实例。比如。“”这个类列举狗的特点,从而使这个类定义了世界上全部的狗。

    而莱丝这个对象则是一条详细的狗,它的属性也是详细的。狗有皮毛颜色。而莱丝的皮毛颜色是棕白色的。因此,莱丝就是狗这个类的一个实例。

    一个详细对象属性的值被称作它的“状态”。(系统给对象分配内存空间。而不会给类分配内存空间。

    这非常好理解。类是抽象的系统不可能给抽象的东西分配空间,而对象则是详细的。)

    如果我们已经在上面定义了狗这个类,我们就能够用这个类来定义对象:

    定义莱丝
    莱丝.毛皮颜色:棕白色
    莱丝.吠叫()
    

    我们无法让狗这个类去吠叫,可是我们能够让对象“莱丝”去吠叫,正如狗能够吠叫,但没有详细的狗就无法吠叫。

    类和对象就好比是“实型”和“1.23”,“实型”是一种数据的类型,而“1.23”是一个真正的“实数”(即对象)。全部的“实数”都具有“实型”所描诉的特征,如“实数的大小”,系统则分配内存给“实数”存储详细的数值。

    §消息传递[编辑]

    一个对象通过接受消息、处理消息、传出消息或使用其它类的方法来实现一定功能,这叫做消息传递机制(Message Passing)。

    如:莱丝能够通过吠叫引起的注意。从而导致一系列的事发生。

    §继承[编辑]

    继承性(Inheritance)是指,在某种情况下,一个类会有“子类”。

    子类比原本的类(称为父类)要更加详细化。比如,“”这个类可能会有它的子类牧羊犬”和“吉娃娃犬”。

    在这样的情况下,“莱丝”可能就是牧羊犬的一个实例。子类会继承父类的属性行为。而且也可包括它们自己的。

    我们如果“狗”这个类有一个方法(行为)叫做“吠叫()”和一个属性叫做“毛皮颜色”。

    它的子类(前例中的牧羊犬和吉娃娃犬)会继承这些成员。这意味着程序猿仅仅须要将同样的代码写一次。

    在伪代码中我们能够这样写:

    牧羊犬:继承
    
    定义莱丝牧羊犬
    莱丝.吠叫()    /* 注意这里调用的是狗这个类的吠叫方法。*/
    

    回到前面的样例,“牧羊犬”这个类能够继承“毛皮颜色”这个属性,并指定其为棕白色。

    而“吉娃娃犬”则能够继承“吠叫()”这种方法,并指定它的音调高于寻常。

    子类也能够增加新的成员,比如。“吉娃娃犬”这个类能够增加一个方法叫做“颤抖()”。设若用“牧羊犬”这个类定义了一个实例“莱丝”。那么莱丝就不会颤抖,由于这种方法是属于吉娃娃犬的,而非牧羊犬。其实,我们能够把继承理解为“是”或“属于”。莱丝“是”牧羊犬,牧羊犬“属于”狗类。因此,莱丝既得到了牧羊犬的属性。又继承了狗的属性。 我们来看伪代码:

    吉娃娃犬:继承
    開始
       公有成员:
          颤抖()
    结束
    类牧羊犬:继承
    
    定义莱丝牧羊犬
    莱丝.颤抖()    /* 错误:颤抖是吉娃娃犬的成员方法。 */
    

    当一个类从多个父类继承时,我们称之为“多重继承”。如一仅仅狗既是吉娃娃犬又是牧羊犬(尽管其实并不合逻辑)。

    多重继承并不总是被支持的,由于它非常难理解,又非常难被好好使用。

    §封装性[编辑]

    具备封装性(Encapsulation)的面向对象程序设计隐藏了某一方法的详细运行步骤,取而代之的是通过消息传递机制传送消息给它。因此,举例来说。“狗”这个类有“吠叫()”的方法,这一方法定义了狗详细该通过什么方法吠叫。

    可是。莱丝的朋友并不知道它究竟是怎样吠叫的。

    从实例来看:

    /* 一个面向过程的程序会这样写: */
    定义莱丝
    莱丝.设置音调(5)
    莱丝.吸气()
    莱丝.吐气()
    
    /* 而当狗的吠叫被封装到类中,不论什么人都能够简单地使用: */
    定义莱丝
    莱丝.吠叫()
    

    封装是通过限制仅仅有特定类的对象能够訪问这一特定类的成员,而它们通常利用接口实现消息的传入传出。

    举个样例,接口能确保幼犬这一特征仅仅能被赋予狗这一类。

    通常来说,成员会依它们的訪问权限被分为3种:公有成员私有成员以及保护成员

    有些语言更进一步:Java能够限制同一包内不同类的訪问;C#VB.NET保留了为类的成员聚集准备的keyword:internal(C#)和Friend(VB.NET);Eiffel语言则能够让用户指定哪个类能够訪问全部成员。

    §多态[编辑]

    多态(Polymorphism)是指由继承而产生的相关的不同的类。其对象对同一消息会做出不同的响应[2]。比如,狗和鸡都有“叫()”这一方法,可是调用狗的“叫()”,狗会吠叫。调用鸡的“叫()”,鸡则会啼叫。 我们将它体如今伪代码上:

    
    開始
       公有成员:
           叫()
           開始
              吠叫()
           结束
    结束
    
    类
    開始
       公有成员:
           叫()
           開始
              啼叫()
           结束
    结束
    
    定义莱丝
    定义鲁斯特
    莱丝.叫()
    鲁斯特.叫()
  • 相关阅读:
    政府信息化建设重点——服务、多元化
    随便聊聊水面效果的2D实现(一)
    【Oracel 基础】小结
    漫话Unity(二)
    Codeforces Round #265 (Div. 2) C. No to Palindromes!
    C99中的restrict和C89的volatilekeyword
    开源 java CMS
    JavaScript--基于对象的脚本语言学习笔记(二)
    小试“以图搜图”
    计算几何 《模板》
  • 原文地址:https://www.cnblogs.com/brucemengbm/p/6742615.html
Copyright © 2020-2023  润新知