R6: 访问超类的私有方法

创建于 2015-02-17  ·  3评论  ·  资料来源: r-lib/R6

不实现这似乎是一个深思熟虑的选择(我尝试了super$private$foo()但它不起作用),所以我猜这违反了子类能够访问其超类的私有方法的一般 OOP 原则。

但这真的会是一件坏事吗? 毕竟,继承是一种系统性的方法,可以在重用已经存在的特性的同时扩展某个类的特性。 但是,如果要扩展的类的所有私有方法都“丢失”/子类无法访问,那么这是否会导致不必要的代码重复(从某种意义上说,必须_再次_将所需的私有方法定义为子类)?

可能只是我,但我认为从其超类调用方法的子类是相当“内部”的,而不是使用某个类实例的客户端应用程序(在这种情况下,您只希望公共方法是当然可以访问)。

假设在Abar()具有纯内部字符并检查某些字段值的有效性,因此您不想将其公开。 但是这样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()

所有3条评论

super ,公共和私有方法都可用。 所以在你的例子中,你可以只使用super$bar()

啊哈! 非常感谢您的澄清!

太好了,很高兴它有帮助!

此页面是否有帮助?
0 / 5 - 0 等级

相关问题

gaborcsardi picture gaborcsardi  ·  22评论

mattwarkentin picture mattwarkentin  ·  7评论

rappster picture rappster  ·  11评论

kenarab picture kenarab  ·  8评论

paulstaab picture paulstaab  ·  3评论