不实现这似乎是一个深思熟虑的选择(我尝试了super$private$foo()
但它不起作用),所以我猜这违反了子类能够访问其超类的私有方法的一般 OOP 原则。
但这真的会是一件坏事吗? 毕竟,继承是一种系统性的方法,可以在重用已经存在的特性的同时扩展某个类的特性。 但是,如果要扩展的类的所有私有方法都“丢失”/子类无法访问,那么这是否会导致不必要的代码重复(从某种意义上说,必须_再次_将所需的私有方法定义为子类)?
可能只是我,但我认为从其超类调用方法的子类是相当“内部”的,而不是使用某个类实例的客户端应用程序(在这种情况下,您只希望公共方法是当然可以访问)。
假设在A
, bar()
具有纯内部字符并检查某些字段值的有效性,因此您不想将其公开。 但是这样B
无法访问它,因此我需要在B
再次定义完全相同的方法。
require("R6")
A <- R6Class(
classname = "A",
public = list(
foo = function() {
"foo"
}
),
private = list(
bar = function() {
"bar"
}
)
)
B <- R6Class(
classname = "B",
inherit = A,
public = list(
foobar = function() {
print(super$foo())
print(super$private$bar())
}
)
)
x <- B$new()
x$foobar()
在super
,公共和私有方法都可用。 所以在你的例子中,你可以只使用super$bar()
。
啊哈! 非常感谢您的澄清!
太好了,很高兴它有帮助!
最有用的评论
在
super
,公共和私有方法都可用。 所以在你的例子中,你可以只使用super$bar()
。