abstract class BaseActivity : AppCompatActivity() {
funNewMessageObserver() {
observable.observe(this, {
onNewMessage(it) //where `it` is a string
}
}
fun onNewMessage(msg : String){
Log.e(TAG, "New Message Parent Method invoked: msg: $msg")
}
} //end of base activity
class ChatActivity : BaseActivity() {
override fun onNewMessage(msg : String) {
Log.e(TAG, "New Message Child Method invoked: msg: $msg")
}
}
我得到什么输出:
调用了新的消息父方法:msg:测试消息
我想要什么:
调用了新消息子方法:msg:测试消息
我正在观察一个线程,如果收到一条新消息,我必须在 UI 上显示它
我在基本活动中观察这个线程,因为在每个子活动(21 个活动)中观察,这将是高度冗余且难以管理的.
我没有将父方法抽象化,以便调用孩子的方法,因为这样每个活动(BaseActivity 的孩子)都必须实现该方法。我希望该方法留在基类中,调用后会有通用操作,然后如果它有该方法的任何实现(覆盖),则该数据将传递给子类
现在,我不知道这怎么可能,如果在 Java、Kotlin 的上下文中有可能,请指导。
帮助表示赞赏。:)
JVM 默认调用你的子重写方法,重写方法可以决定是否调用 super 方法,这就是继承的工作原理。但是要调用覆盖的方法,您必须确保已覆盖它!
在你的代码还没有宣布你的onNewMessage
方法open
中BaseActivity
。因此编译器假定该方法为 final 并且不允许覆盖它,因此替换
fun onNewMessage(msg : String) {
Log.e(TAG, "New Message Parent Method invoked: msg: $msg")
}
和
open fun onNewMessage(msg : String) {
Log.e(TAG, "New Message Parent Method invoked: msg: $msg")
}
因此可以使用相同的签名覆盖它。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句