初始化基类 a. 当创建了一个导出类的对象时,该对象包含了一个基类的子对象。基类的子对象被包装在导出类对象内部 b. 在构造器中调用基类构造器来执行初始化,而基类构造器具有执行基类初始化所需要的所有知识和能力。Java会自动在导出类的构造器中插入对基类构造器的调用。 c. 构建过程是从基类“向外”扩散的,所以基类在导出类构造器可以访问它之前,就已经完成了初始化。
带参数的构造器 a. 如果没有默认的基类构造器,或者想调用一个带参数的基类构造器,就必须用关键字super显示地编写调用基类构造器的语句,并且配以适当的参数列表。 b. 调用基类构造器必须是你在导出类构造器中要做的第一件事(如果你做错了,编译器会提醒你)
final数据 a. 一个既是static又是final的域只占据一段不能改变的存储空间,用大写表示 b. 用于对象引用,final使引用恒定不变,但对象内容可以被改变 c. Java允许生成“空白final”,所谓空白final是指被声明为final但又未给定初值的域 d. 必须在域的定义处或者每个构造器中用表达式对final进行赋值,这正是finanl域在使用前总是被初化的原因所在 e. Java允许在参数列表中以声明的方式将参数指明为final。这意味着你无法在方法中更改参数引用所指向的对象:你可以读参数,但却无法修改参数。这一特性主要用来向匿名内部类传递数据。
final方法 a. 使用final方法的原因有两个。 b. 第一个原因是把方法锁定,以防止任何继承类修改它的含义。想要确保在继承中使方法行为保持不变,并且不会被覆盖 c. 第二个原因是效率,现在已经不用的,效率问题交给Java虚拟机 d. 类中所有的private方法都隐试指定为final的,对private方法添加final修饰词,没有任何意义 e. “覆盖”只有在某方法是基类的接口的一部分时才会出现
final类 a. 当将某个类的整体定义为final时(通过将关键字final置于它的定义之前),就表明了你不打算继承该类,而且也不允许别人这样做。
有关final的忠告 a. 要预见类是如何被复用的一般是很困难的,特别是对于一个通用类而言更是如此 b. 在设计类时,将方法指明是final,应该说是明智的