java编程思想1-对象导论

面向对象五个基本特性

万物皆为对象
程序是对象的集合,他们通过发送消息来告知彼此所要做的(调用方法)
每个对象都有自己的由其他对象所构成的存储(组合)
每个对象都拥有其类型。
某一特定类型的所有对象都可以接收同样的消息(多态)

has-a is-a is-like-a

  • has-a :组合的概念,比如汽车拥有引擎
  • is-a:继承, 父类与导出类所包含的方法完全相同
  • is-like-a:继承,子类添加父类没有的方法

java编程思想1-对象导论_第1张图片
截图.png

空调和制冷系统就是is-a关系,因为二者方法相同, 热力泵和制冷系统是is-like-a的关系,因为heat()父类没有。
前期绑定: 一个非面向对象变成的编译器产生的函数调用会引起前期绑定。编译器产生对一个具体函数名字的调用,而运行时将这个调用解析到将要被执行的代码的绝对地址
后期绑定:当面向对象发送消息时,被调用的代码直到运行时才能确定。java使用一小段代码来代替绝对地址调用。这段开发使用在对象中存储的信息来计算方法体的地址。
Bird b = new Goose(); new Goose() 代替绝对地址。
后期绑定也称为动态绑定,是java默认的行为

单根继承结构:

java类的终极基类是Object。
好处:保证所有对象都具备某些功能,使垃圾回收器的实现变的容易多了,方便找到左右的对象。由于所有对象都保证具有其类型信息(至少是Object),不会因为无法确定对象的类型而陷入僵局

参数化类型:泛型

知道自己所保存的对象类型,从而不需要向下转型以及消除犯错误的可能。例如从容器中取出对象,默认是Object的类型,如果无参数化,需要向下转型成确切的类型

向下转型向上转型

子类转父类为向上转型:安全,
父类到子类转型为向下转型:不安全。

对象的生命周期

对象的创建:

  1. 速度快:对象的存储空间和生命周期可以在编写程序时确定,它可以通过将对象置于堆栈(他们有时被成为自动变量(automatic variable)或限域变量(scoped variable))或静态存
    储区来实现,这种方式将存储控件分配和释放置于优先考虑的位置,某些情况下这样控制非常有价值。但是,也牺牲了灵活性,因为必须在编写程序时知道对象确切的
    数量、生命周期和类型。(c++实现的方式)

2.堆的内存池中动态创建对象。这种方式直到运行时才直到需要多少对象,生命周期,具体类型。如果需要创建一个新对象,可以在需要的时刻直接在堆中创建。
因为存储空间是在运行时被动态管理的,所以需要大量的时间在堆中分配存储空间,这可能要远远大于在堆栈中创建存储空间的时间。在堆栈中创建存储空间和释放存储空间
通常各需要一条汇编指令即可,分贝对应将栈顶指针向下移动和向上移动即可。

动态方式有一个一般性假设:对象趋于变得复杂,所以查找和释放存储空间的开销不会对对象的创建造成重大冲击。

java完全采用了动态内存分配方式。每当想要创建对象是,就要使用new关键字来构建此对象的动态实例。java只能在堆上创建对象。但是在堆上创建对象,编译器就会对它的声明周期
一无所知。java提供垃圾回收器,它可以自动发现对象何时不再被使用,并且销毁它。

你可能感兴趣的:(java编程思想1-对象导论)