如何调用派生的 class (child class) 的重写方法?

How to call the overridden method of a derived class (child class)?

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")
    }
}

我得到什么输出:

新消息Parent调用的方法:消息:测试消息

我要什么out:

新消息Child调用的方法:消息:测试消息

现在,我不知道这怎么可能,如果在 Java 的上下文中有可能,Kotlin,请指导。

感谢您的帮助。 :)

JVM默认调用你的子重写方法,重写方法可以决定是否调用super方法,这就是继承的原理。但是要调用覆盖的方法,您必须确保已 覆盖它!

在您的代码中,您没有在 BaseActivity 中声明 onNewMessage 方法 open。因此编译器假定该方法是最终的并且不允许覆盖它,所以替换

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")  
}

因此可以使用相同的签名覆盖它。