对象导论(一)

1.抽象过程

面向对象的五个基本特性
	1.万物皆为对象
	2.程序是对象的集合它们通过发送消息来告诉彼此所要做的
	3.每个对象都有自己的由其他对象所构成的存储
	4.每个对象都拥有其类型
	5.某一特定类型的所有对象都可以接受同样的消息

2.每个对象都有一个接口

3.每个对象都提供服务

4.被隐藏的具体实现

类的内部设定边界:三个关键词、一种默认访问权限
	Public:表示紧随其后的元素对任何人都是可用的
	private:除了类型创建者和类型的内部内部方法之外的任何人都不能访问的元素。
	protected关键字与private作用相当,差别仅在于继承的类可以访问protected成员 但是不能访问private成员
	默认权限:包访问权限,类可以访问在同一包中的其他类的成员,但是在包外,这些成员如同指定了private一样

5,复用具体实现

一个类的对象置于某个新的类中----->创建一个成员对象
现有的类合成新的类------>组合
如果组合是动态发生的----->聚合
组合经常被视为“has-a”拥有关系,汽车拥有引擎

6.继承

“是一个”与“像是一个”
“是一个”:子类覆盖重写父类的方法
“像是一个”:子类在继承父类的基础上添加新的接口元素,扩展接口

7.伴随多态的可互换对象

泛化:处理类型的层次结构的时候,经常把一个对象不当作它所属的特定类型来对待,而是将其当作其基类对待,这使得人们可以编写出不依赖于特定类型的代码。

泛化是如何找到正确的方法的?
编译器不可能产生传统意义上的函数调用。一个非面向对象编程的编译器产生的函数调用回引起所谓的前期绑定,这么做意味着编译器将产生对一个具体函数名字的调用,而运行时将对这儿调用解析到将要被执行的代码的绝对地址。

在OOP中,程序直到运行时才能够确定代码的地址,所以当消息发送到一个泛化对象时,必须采用其他的机制,后期绑定,编译器确保被调用方法的存在,并对调用参数和返回值执行类型检查(无法提供此类保证的语言被称为弱类型)。但是并不知道将被执行的确切代码。
为了执行后期绑定,Java使用一段特殊的代码来替代绝对地址调用,这段代码使用在对象中存储的信息来计算方法体的地址。

把导出类看作是他的基类的过程成为向上转型

8.单根继承结构

在java中所有的类最终都继承自单一的基类(除了C++所有的OOP(面向对象)语言都继承单一的基类),Java继承的基类就是Object

优缺点:
优点:所有的对象都具有一个共用接口,从向后兼容的角度来看,这么做能更好的适应C模型,受限较少
缺:遇到不兼容的接口时,有一定麻烦(比如多重继承)
优点:所有对象都具备某些功能,更容易在堆上创建对象,参数传递得到极大简化
优点:使垃圾回收变得简单。每个对象都具备类型信息,不会因为无法确定对象的类型而陷入僵局,这对于系统级操作(异常处理)显得尤为重要,给编程带来灵活性

9.容器

List:存储序列
	ArrayList
	LinkedList
Map:关联数组,用来建立对象之间的关联
Set:某种对象类型只持有一个

参数化类型
Java SE5之前:容器存储为通用类型:Object
	缺点:存储必须先向上转型(安全)然后取出用时向下转型(危险)
	向下转型不仅需要更多的程序运行时间,还必须记住存入对象时的类型
之后:参数化类型机制。
	参数化类型就是一个编译器可以自动定制作用于特定类型上的类。
	例如:定制一个直接收Shape对象的容器  ArrayList<Shape>
	参数化类型---->泛型
		一对尖括号,中间包含类型信息,通过这些特性就可以识别对泛型的使用。

注:本文档为《Java编程思想》阅读笔记

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值