R语言S4类子类方法如何调用超类方法后返回控制权给子类
R S4子类方法调用父类同名方法实现
在S4对象系统中,子类重写方法时要调用父类(超类)的对应实现,直接使用S4内置的callNextMethod()函数即可,该函数会自动沿类的继承链查找当前方法的上一级实现执行,是S4体系原生支持的继承调用方案,不需要重复编写父类逻辑或者手动做类转换。
正确的SubClass方法实现
直接在子类方法中需要调用父类逻辑的位置插入callNextMethod()即可,完整代码如下:
# 类、泛型、父类方法的基础定义和给出的代码完全一致 setClass("SuperClass", slots=c(a="character"), prototype=list(a="A")) setClass("SubClass", slots=c(b="character"), prototype=list(b="B"), contains="SuperClass") setGeneric("foobar", function(x) standardGeneric("foobar")) setMethod("foobar", "SuperClass", function(x) { cat(x@a, "\n", sep="") }) # 子类foobar方法的正确写法 setMethod("foobar", "SubClass", function(x) { # 调用SuperClass类的foobar方法 callNextMethod() # 执行SubClass特有的计算逻辑 cat(x@b, "\n", sep="") })
运行验证
执行测试代码:
x <- new("SubClass") foobar(x)
即可得到预期输出:
"A" "B"
补充说明:如果是多继承场景需要手动指定调用某一个特定超类的方法,可以给
callNextMethod()传入显式转换为对应超类的对象,写法为callNextMethod(as(x, "目标超类名")),单继承场景下无参数调用即可自动匹配继承关系。
内容的提问来源于stack exchange,提问作者CuriousTim
相关产品推荐
相关产品推荐

