The*_*can 13 java methods abstract
这是我大学的学习资料中引用的问题.
这对我来说完全没有意义.
对我来说,钩子是(大多数顺序但不仅仅是)程序中的指定点,您可以在其中指定自己的方法或要执行的回调.
例如,一个应用程序有一个"on before before hook",我可以在那里注册我的回调方法,在关机之前将用户数据保存到磁盘.
抽象方法是自我解释.
对我来说这是完全不同的东西?或者这些事情中的任何一个都具有我不知道的第二个含义?我做了一个快速搜索,但没有找到任何东西.
jjn*_*guy 13
我真的不认为这两件事非常相似.他们可能相关的一种方式可以通过以下方式证明:
public abstract class AbstractActionDoer() {
public void doAction(Action act) {
beforeAction();
act.do();
afterAction();
}
protected abstract void beforeAction();
protected abstract void afterAtion();
}
public class DefaultActionDoer() extends AbstractActionDoer {
public void doAction(Action act) {
beforeAction();
act.do();
afterAction();
}
// default empty implementation
protected void beforeAction() { }
protected void afterAtion() { }
}
Run Code Online (Sandbox Code Playgroud)
在此示例中,您可以覆盖DefaultActionDoer可以更改功能的挂钩,但它们不是必需的.这类似于抽象方法,因为需要重写抽象方法来定义功能.
对我来说这是完全不同的东西吗?
它们都是将代码延迟到客户端类(您的类的用户)的方法:
1) 定义抽象方法
2)定义一个钩子
当然,您使用一种方法而不是另一种方法有多种原因。例如,钩子方法允许您注册多个回调。但是抽象方法提供了对类(受保护的方法和 ivars)的更直接的访问。
这可能是太多信息,但在 android 编程中,您会看到两者:
您可以提供 将CursorAdapter数据源关联到 UI 小部件。
http://developer.android.com/reference/android/widget/CursorAdapter.html
这个类是抽象的,有两个方法newView,bindView它们将数据实际绑定到 UI 小部件。类必须子类化才能使用这个类。
然而,一个子类CursorAdapter是SimpleCursorAdapter
http://developer.android.com/reference/android/widget/SimpleCursorAdapter.html
此类实现newView并bindView选择提供一个ViewBinder接口,客户端可以实现该接口并向 SimpleCursorAdapter 实例注册。该ViewBinder实例必须提供将setViewValue特定数据段绑定到特定 UI 小部件的方法。
与的一个关键区别SimpleCursorAdapter是提供 aViewBinder是可选的,这是 hook 方法的优点之一。
就我个人而言,在询问 StackOverflow 社区之前,我会去找教授并要求澄清。
...但是,话虽如此,我相信(如果您对钩子的描述是正确的)任何类都可以为钩子注册回调方法,而抽象方法则强制子类 a 为给定方法实现自己的算法。
| 归档时间: |
|
| 查看次数: |
18946 次 |
| 最近记录: |