1.1伴随多态的可互换对象

  面向对象程序设计语言使用了后期绑定 的概念。当向对象发送消息时,被调用的代码直到运行时才能确定。也叫动态绑定。 
  编译器确保被调用方法的存在,并对调用参数和返回值执行类型检查(Java是强类型的语言,无法提供此类保证的语言被称为是弱类型的),但是并不知道将被执行的确切代码。 
  在某些语言中,必须明确地声明希望某个方法具备后期绑定属性所带来的灵活性(C++是使用virtual关键字来实现的)。在这些语言中,方法在默认情况下不是动态绑定的。而在Java中,动态绑定是默认行为(Java中除了static方法、final方法和private方法之外,其它所有方法都是动态绑定),不需要添加额外的关键字来实现多态。 
  把将导出类看做是它的基类的过程称为向上转型(upcasting)

1.2 单根继承结构

  在Java中(事实上还包括除C++以外的所有OOP语言),所有的类最终都继承自单一的基类,这个终极基类的名字就是Object。 
  单根继承结构的好处:

  • 在单根继承结构中所有对象都具有一个共用接口,所以它们归根到底都是相同的基本类型。
  • 单根继承结构保证所有对象都具备某些功能。
  • 单根继承结构使垃圾回收器的实现变得容易得多,而垃圾回收器正是相对C++的重要改进之一。由于所有对象都保证具有其类型信息,因此不会因无法确定对象的类型而陷入僵尸。这对于系统级操作(如异常处理)显得尤其重要,并且给编程带来了更大的灵活性。

1.3 对象的创建和生命期

  • 对象的数据位于何处(作用域): 
    • 将对象置于堆栈(它们有时被称为自动变量(automatic variable)或限域变量(scoped variable))或静态存储区域内来实现。这种方式将存储空间分配和释放置于优先考虑的位置,某些情况下这样控制非常有价值。但是,也牺牲了灵活性。
    • 第二种方式是在被称为堆(heap)的内存池中动态地创建对象。在这种方式中,直到运行时才知道需要多少对象,它们的生命周期如何,以及它们的具体类型是什么。

  Java完全采用了动态内存分配方式(基本类型只是一种特例)。每当想要创建对象时,就要使用new关键字来构建对象的动态实例。

  • 对象的生命周期: 
    Java的垃圾回收器被设计用来处理内存释放问题。

发表评论

邮箱地址不会被公开。 必填项已用*标注