これを実装しないことは意図的な選択のように思われるので(私は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()
使用できます。