Thinking In Java 对象导论(4)

复用的具体实现

①代码复用是面向对象程序设计语言所提供的最了不起的优点之一。

最简单的复用某个类的方法是直接使用这个类的一个对象,此外也可以将那个类的一个对象置于一个新的类中。我们将其称为:创建一个成员对象。

②组合

使用现有的类合成新的类叫组合。动态发生的组合叫聚合。组合被视为“has-a”关系。因为组合更加灵活,在建立新类时应该首先考虑组合。

③继承

通过继承达到以现有的类为基础,复制它然后通过添加和修改这个副本来创建新类。当源类(父类)发生变化时,被修改的副本(子类、导出类或继承类)也会反映出这些变化。

一个基类包含所有导出类型所有共享的特性和行为。

当继承现有类型时,也就创造了新的类型。这个新类型不仅包含了现在类型的所有成员(尽管private成员被隐藏并且不可访问),更重要的是它复制了基类的接口。也就是说,所有可以发送给基类对象的消息同时也可以发送给导出类对象。由于通过发送给类的消息的类型是可知类型,所有就意味着导出类与基类拥有相同的类型。

使基类与导出类产生差异的两种方法:1.直接在导出类中添加方法。2.改变现有基类的方法的行为(在导出类中 覆盖 overriding 基类的那个方法)。

④is-a 与 is-like-a

处理继承的理想方式:纯粹替代(替代原则),导出类和基类是完全相同的类型,具有完全相同的接口,可以用一个导出类对象来完全替代一个基类对象。(is-a)

但有时必须在导出类型中添加新的接口,这样也就扩展了接口,这个新的类型仍然能够替代基类,但是这种替代不完美,因为基类中无法访问新添加的方法。(is-like-a)

用替代原则的方式来设计是很好的,但是我们经常必须在导出类的接口中添加新的方法。

时间: 2024-08-05 19:33:30

Thinking In Java 对象导论(4)的相关文章

Thinking In Java 对象导论(1)

Alan Kay总结的Smalltalk(java 所基于的语言之一)的五个基本特征: ①万物皆为对象 将对象看做奇特的变量,可以存储数据.对自身执行操作. ②程序是对象的集合,它们通过发送消息来告知彼此所要做的. 可以把消息相像为对特定对象的方法的调用请求. ③每个对象都有自己的由其他对象所构成的存储. 换句话说,可以通过创建包含现有对象的包的方式来创建新类型的对象. ④每个对象都拥有其类型. 每个对象都是某个类的一个实例(instance). ⑤某一特定类型的所有对象都可以接收同样的消息.

Java - 对象导论

面向对象语言的基本特征: 1. 万物皆是对象. 2. 程序是对象的集合, 它们通过发送消息来告知彼此所要做的. 3. 每个对象都是自己的由其他对象所构成的存储. 4. 每个对象都拥有其类型. 5. 某一特定类型的所有对象都可以接收同样地消息. Java的访问限定词: public, private, protected. 未设访问限定词是包访问权限. C++默认情况下不是动态绑定的(添加virtual), Java默认是, 更偏向于面向对象. 向上转型(多态调用), 向下转型(容器取回Objec

【java编程思想--学习笔记(四)】对象导论

写这篇博客的前言: 长话短说,我希望通过阅读<java编程思想>来使我的代码 简洁可用 . 目的的层次不同,首先具体的目标是,了解Java的特性和巩固Java的基础. 更抽象的目的如下: 1.期待以巩固基础的方式,使代码优美,简洁,高效. 2.使自己写的模块能够开放适度,好用. 3.形成一种对代码是否优美的审美观. 于是<Java编程思想>第一章 对象导论 由此开始. 1.1 抽象过程 java 相对于命令式语言的优势在于只针对于待解问题建模.后者所做的主要抽象要求所做问题基于计算

Java编程思想 第一章、对象导论

对象导论阅读理解: 1.解决问题的复杂性直接取决于抽象的类型和质量(抽象类型及抽象的是什么?). 汇编语言是对底层机器的轻微抽象,而C.Basic等指令式语言都是对汇编语言的抽象,它们所做的主要抽象仍要求在解决问题时 要基于计算机的结构,而不是基于要解决的问题的结构来考虑,Java语言与C.Basic等相反,其面向问题空间的抽象而非计算 机底层实现来考虑问题结构. 2.解空间及问题空间 解空间:对应于机器模型,问题建模的地方: 问题空间:实际解决问题的模型,问题存在的地方,如一项业务: 3.对象

Think in Java(一):对象导论

1. OOP的特点 (1) 万物皆为对象; (2) 程序是对象的集合,他们通过发送信息来告诉彼此所要做的; (3) 每个对象都有自己的由其他对象所构成的存储; (4) 每个对象都拥有它的类型; (5) 某一特定类型的对象都可以接收同样的消息; 2. Java比C++简单? (1) Java有垃圾回收器, 不用手动销毁对象; (2) Java使用单根继承; (3) Java只能以一种方式创建对象(在堆上创建); Think in Java(一):对象导论

【Java编程思想】一、对象导论

作为一个电子专业的人,在学习了将近3年的嵌入式技术后,决定投奔移动互联网,在互联网大潮中急流勇进! 为了学习OOP(Object-oriented Programming),为了转向移动互联网,我决定开始学习android开发,那么就从Java开始吧! Java的学习资料很多,在研究几天之后,决定从<Java编程思想>这本书开始. 而在这本书之前,我已经看完了一个培训导师的Java4Android的Java教学视频,看的很快,因为我学过C和C++. 但我的Java水平依旧很差,主要在于面向对象

Java 基础之一对象导论

对象导论 1.1 抽象过程 所有编程语言都提供抽象机制.人们所能解决的问题的复杂性直接取决于抽象的类型和质量. 汇编语言是对底层机器的轻微抽象. 我们将问题空间中的元素及其再解空间中的表示称为对象.这种思想实质是:程序可以通过添加新类型的对象使自身适用于某个特定的问题. 万物皆为对象 可以抽取待求解问题的任何概念化构建表示程序中的对象. 程序是对象的集合 他们通过发送消息来告知彼此所要做的. 每个对象都有自己的由其他对象所构成的存储 每个对象都拥有其类型 某一特定类型的所有对象都可以接收同样的消

Java编程思想总结(一)对象导论

Java编程思想总结(一)对象导论 1.1 抽象过程 万物皆对象. 程序是对象的集合(即:类),他们通过发送消息(调用方法)来告知彼此要做的. 每个对象都有自己的由其他对象所构成的存储(引用其他对象或基本类型,即组合). 每个对象都拥有其类型.每个类最重要的区别于其他类的特征就是“可以发送什么样的消息给它”(即调用方法). 某一特定类型的所有对象都可以接受同样的消息. 对象具有状态(成员属性).行为(成员方法)和标识(引用的名称).每个对象在内存中都有唯一的一个地址. 1.2 每个对象都有一个接

thinking in java (对象导论、一切都是对象)

1.public,对任何元素可用:protected,相当于private,差别在于继承的类可以访问protected,不能访问private:private,只有类型创建者和类型的内部方法可以访问. 2.使用新类声明一般用private,修改不影响客户端的使用. 3.覆盖overriding,就是重写,继承extends.也可以添加新方法. 4.客户端编程,插件(plug-in),脚本语言,java,备选方案,internet和intranet,服务器端编程.(提到python) 5.特例:n