Java编程思想(第四版)笔记(二)

第7章 复用类

7.6 protected关键字

指明“就类用户而言,这是private的,但对于任何继承于此类或其他任何位于同一个包内的类来说,它却是可以访问的。”

尽管可以创建protected域,但是最好的方式还是把域保持为private;你应该一直保留“更改底层实现”的权利,然后通过protected方法来控制类的继承者的访问权限。

7.7 向上转型

由导出类转型成基类(由子类转换为父类),在继承图上是向上移动的,因此一般称为向上移动。

由于向上转型是从一个较专用类型向较通用类型转换,所以总是很安全的。

尽管在OOP的过程中多次强调继承,但这并不意味着要尽可能使用它。相反,应当慎用这一技术,其使用场合仅限于你确信使用该技术确实有效的情况。

到底是该用组合还是用继承,一个最清晰的判断方法就是问一问自己是否需要从新类向基类进行向上转型。如果必须向上转型,则继承是必要的;但如果不需要,则应当好好考虑自己是否需要继承。

7.8 final关键字

7.8.1 final数据

对于基本类型,final使数值恒定不变;而对于对象引用,final使引用恒定不变。一旦引用被初始化指向一个对象,就无法再把它改为指向另一个对象。然而,对象其自身却是可以改变的,Java并未提供使任何对象恒定不变的途径(但可以自己编写类以取得使对象恒定不变的效果)。这一限制同样适用于数组,它也是对象。

Java允许在参数列表中以声明的方式将参数指明为final。这意味着你无法在方法中更改参数引用所指向的对象。这一特性主要用来向匿名内部类传递数据。

7.8.2 final方法

使用final方法的原因有两个。一、把方法锁定,以防止任何继承类修改它的含义。这是出于设计的考虑:想要确保在继承中使方法行为保持不变,并且不会被覆盖。二、效率。事实上,这种做法正在逐渐受到劝阻,应该让编译器和JVM去处理效率问题。

类中所有的private方法都隐式地指定为是final的。

7.8.3 final类

当将某个类的整体定义为final时,就表面了你不打算继承该类,而且也不允许别人这样做。由于final类禁止继承,所以final类中所有的方法都隐式指定为final的,因为无法覆盖。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章