如何调用派生类(子类)的重写方法?

瓦吉德
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方法openBaseActivity因此编译器假定该方法为 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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

在派生类中调用重写的方法

在Java中,如何从派生类中的重写方法中调用基类的方法?

调用派生类的重写虚方法而不暴露它们

如何调用派生类方法?

派生类调用父类的方法调用重写的虚方法调用错误的方法

派生类指向基类对象的指针如何调用派生类的方法?

派生类中的重写方法

从派生类对象访问重写的方法

如何模拟派生类调用其基类方法?

C ++如何从多个派生类调用基类方法?

基类构造函数在Java中调用重写方法时派生类对象的状态

Javascript:在派生类中重写之前如何调用基类函数?

如何判断哪个派生类调用覆盖基础方法

如何从派生类外部调用超级方法(即:toString())

如何确保从派生类中调用纯虚拟方法?

C#如何从派生类调用接口方法

如何从修饰的子类方法中调用重写的超类方法

如何从重写的子类方法调用超类的继承方法?

如何在派生类中重写模板类的静态方法

如何强制派生类重写仅返回其类名的方法?

派生类调用父方法

用派生类调用重载方法

调用派生类的非继承方法

如何从子类中调用重写的父类方法?

是否可以在派生类中重写静态方法?

即使它们是私有的,基类的好友函数如何调用派生类的重写虚拟函数?(C ++)

C ++多态性:派生类调用基类虚拟函数,而不是重写的派生类

从父类调用子类的重写方法

如何在python中相同的重载派生类方法中调用基类方法?