封装向下转型动作
某个函数返回的对象,需要由函数调用者执行【向下转型】动作
将向下转型动作移到函数中
动机
由于「 计算对象型别」 的动作往往比较麻烦, 你还是常常需要亲自告诉编译器「 对象的确切型别」 。 向下转型在Java 特别盛行, 因为Java 没有template( 模板) 机制, 因此如果你想从群集( collection) 之中取出一个对象, 就必须进行向下转型。【常会在「 返回迭代器( iterator) 或群集( collection) 」 的函数身上发生。 】
方法
- 找到【必须对函数调用结果进行向下转型】的地方
- 用到一个集合(collection)或者迭代器(iterator)的函数中
- 将向下转型动作移到该函数中
范例
Object lastReading() {
return readings.lastElement();
}
---------------------------------
Reading lastReading() {
// 当我拥有一个群集时, 上述那么做就很有意义
return (Reading) readings.lastElement();
}
假如有如下代码
// 客服端代码
...
Reading lastReading = (Reading) theSite.readings().lastElement();
...
------------------------------------------------------------------
// 集群代码
Reading lastReading = theSite.lastReading();
class Site...
Reading lastReading() {
return (Reading) readings().lastElement();
}
...
在OO设计中, 继承关系代表is-a关系, 因此subclass is-a superclass , 因此正确设计之subclass 决不会破坏superclass 带来的任何契约