建筑和蓝图之间的关系是间接的 。 你可以通过蓝图了解建筑的结构 , 对于建筑本身是无法获取这些信息的 。 但是如果你想打开一扇门 , 那就必须接触真实的建筑才行——蓝图只能表示门应该在哪 , 但并不是真正的门 。
一个类就是一张蓝图 , 为了获得真正可交互的对象 , 我们必须按照类来建造一个东西 , 这个东西通常被称为实例 , 有需要的话 , 我们可以直接在实例上调用方法并访问所有公有数据属性 。
蓝图只是一张纸 , 它不是真正的建筑 。
蓝图可以了解建筑的整体结构 , 而建筑本身反映建筑的整体结构则需要反推理 。
其实在编程做一个软件系统 , 写一本书、造一个房子 , 这些都是一样的 , 需要一个设计蓝图 , 然后根据蓝图来逐步完善 。 当然 , 作者在这里的蓝图仅仅指的是类的结构 , 在软件中更大的蓝图是软件系统的整体设计思路 。
这个对象就是类中描述的所有特性的一个副本 。
介绍实例
你走进一栋建筑时 , 它的蓝图不太可能挂在墙上 。 类似的 , 你通常不会使用一个实例对象来直接访问并操作它的类 , 不过你至少可以判断它来自哪个类 。
实例拥有类中所有的特性 , 以类的特性创建出来的副本 。
把类和实例对象之间的关系看作是直接关系 , 而不是间接关系通常更有助于理解 。 类通过复制操作被实例化对象形式 。
实例被创建出来后一般不会再用来访问类 。
构造函数类实例是由一个特殊的类方法构造的 , 这个方法名通常和类名相同 , 被称为构造函数 。 这个方法的任务就是初始化实例需要的所有信息 。
实例与类之间的关系 , 是通过复制类里面的性质来成形 。
举例来说 , 思考下面这个关于类的伪代码:
classCoolGuy{
specialTrick=nothing
GoolGuy(trick){
specialTrick=trick
showOff(){
output('Here is my trick: 'specialTtick)
我们可以调用类构造函数来生成一个 CoolGuy 实例:
Joe=newCoolGuy('jumping rope')
Joe.showOff()// 这就是我的绝技 , 跳绳
注意:CoolGuy 类有一个 CoolGuy() 构造函数 , 执行 new CoolGuy() 时实际上调用的就是它——构造函数 。 构造函数会返回一个对象(也就是类的实例) , 之后我们可以在这个对象上调用 showOff 方法 , 来输出指定 CoolGuy 的特长 。
类构造函数属于类 , 而且通常和类同名 。 此外 , 构造函数大多需要用 new 来调用 , 这样语言引擎才知道你想要构造一个新的类实例 。
多态Car 重写了继承自父类的 drive() 方法 , 但是之后 Car 调用了 inherited.drive() 方法 , 这表明了 Car 可以引用继承来原始 drive() 方法 。 快艇的 pilot() 方法同样引用了原始的 drive() 方法 。
这里的构造函数是介绍的面向对象的构造函数 。
这个技术被称为多态或虚拟多态 。 在本例中 , 更恰当的说法是相对多态 。
多态是一个非常广泛的话题 , 我们现在所说的「相对」只是多态的一个方面:任何方法都可以引用继承层次中高层的方法 。 之所以说「相对」是因为我们并不会想要访问的绝对继承层次 , 而是使用相对引用「查找上一层」 。
在许多语言中可以使用 super 来替代本例中的 inherited:它的含义是「超类」superclass , 表示当前类的父类或者祖先类 。
多态的另一个方面是 , 在继承链的不同层次中一个方法名可以被多次定义 , 当调用方法时会自动选择合适的定义 。
- 尽管大刀阔斧地尝鲜了大小核混合架构|13代酷睿最大睿频比12900ks还要高200~300mhz
- 【竞彩课堂】什么是单场投注?什么是混合过关?
- 科大讯飞|10.1英寸护眼大屏!科大讯飞AI学习机A10图赏
- 苹果9英寸折叠屏曝光!加持ToDesk后堪称iPhone/iPad/Mac混合体
- 京东云混合多云操作系统云舰,解决企业出海运维难题
- 10.89万元起,风行T5 EVO热浪联名伍六七高燃上市
- javascript|微信新功能:暴露了谁最爱你
- javascript|玩家利用3D打印技术制作了《宝可梦》中的小火龙,还带它出门露营
- 游戏性能稳了!联想小新Pro 16 2022显卡曝光:RTX3050 Ti支持混合输出
- RTX|联想小新Pro 16 2022显卡曝光:RTX3050 Ti 支持混合输出