---- 具体的例子
比如我有一个 CoreDataTableViewController, 继承这个类的子类设置好一个 NSFetchedResultsController 并且实现 cofigureCell: 方法, 就可以从 CoreData 中装载数据, 并在 TableView 中显示.
不过 CoreDataTableViewController 只有显示数据的功能, 不能更改其中的数据. 所以就有了EditableCoreDataTableViewController, 它就具有添加, 删除的功能. 只要继承 EditableCoreDataTableViewController 的子类实现了 configureNewItem: 就可以向其中添加新的数据. 当然它也需要实现 CoreDataTableViewController 需要的 cofigureCell: 方法.
其实现在想想, 为什么要 EditableCoreDataTableViewController 类呢, 我也可以把 editable 这部分的功能放在 CoreDataTableViewController 这个里面...
---- 总结一下
希望对于和我有同样困惑的人有所帮助. 如果哪里说得不对, 还请各位指正. 同时也欢迎继续讨论. :D
-- 问题
"如果父类(A)和子类(A1)都有抽象方法, 需要继承他们的子类去实现, 如何设计接口使得继承 A1 的子类不仅仅知道需要实现 A1 的抽象方法, 还需要实现 A 的抽象方法? (子类相对父类就多一个功能的情况下)"
-- 我现在想到的解决方案
"由于子类与父类差异并不大, 所以子类的功能可以合并为父类的功能."
PS. 真是不知道为什么自己一开始要把这个功能分离出来... 害得自己苦苦思考了一天...
-- 问题扩展
"如果是在子类和父类差异较大的情况下(例如 UIScrollView 和 UITableView), 可能子类应该提供父类抽象方法的合理默认实现."
---- 回复
@
dnnta其实我也想过这样去做. 然后我去看了看 UITableViewController 的实现. UITableViewController 自身是遵循 UITableViewDataSource Protocol 的, 而且本身空实现了 UITableViewDataSource 所要求的 tableView:cellForRowAtIndexPath: 方法.
因为对于继承 UITableViewController 的子类来说, 如果没有实现 tableView:cellForRowAtIndexPath: 这个方法, 是不会报错的(warning/error). 但是如果控制的 TableView 需要这个方法的话, 会在运行时报错(报错大意是说这个方法应该返回一个 cell).
所以, 按照这样的思路去设计的话, 就和我在帖子正文中提到的 A 方法类似.
@
railgun 您是说的 "@required"?
@
PrideChung这两个类都是抽象的意思是指, 他们有一部分方法需要继承他们的子类来实现. 其本身除了这些方法以外, 还有一些方法是他们自身实现的.
@
fangzhzh 这两个类不是正交的概念, 应该是扩展吧.