R6: Mengakses metode pribadi superclass

Dibuat pada 17 Feb 2015  ·  3Komentar  ·  Sumber: r-lib/R6

Tidak mengimplementasikan ini sepertinya pilihan yang disengaja (saya mencoba super$private$foo() yang tidak berfungsi) dan jadi saya kira itu bertentangan dengan prinsip-prinsip OOP umum bahwa subclass dapat mengakses metode pribadi superclass mereka.

Tapi apakah itu benar-benar hal yang buruk? Bagaimanapun, pewarisan adalah cara sistematis untuk memperluas fitur kelas tertentu sambil menggunakan kembali yang sudah ada. Tetapi jika semua metode privat dari kelas yang sedang diperluas "hilang"/tidak dapat diakses oleh subkelas, maka bukankah ini menghasilkan duplikasi kode yang tidak perlu (dalam arti bahwa metode privat yang diperlukan harus didefinisikan _again_ sebagai metode privat di subkelas)?

Mungkin saja saya, tetapi saya akan menganggap metode pemanggilan subkelas dari superkelasnya menjadi sesuatu yang agak "internal" sebagai lawan, katakanlah, aplikasi klien menggunakan instance kelas tertentu (dalam hal ini Anda hanya ingin metode publik menjadi dapat diakses, tentu saja).

Misalkan dalam A , bar() memiliki karakter internal murni dan memeriksa validitas nilai bidang tertentu sehingga Anda tidak ingin mempublikasikannya. Tetapi dengan cara itu tidak dapat diakses untuk B dan karenanya saya perlu mendefinisikan metode yang sama persis lagi di 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()

Komentar yang paling membantu

Di super , metode publik dan pribadi tersedia. Jadi dalam contoh Anda, Anda bisa menggunakan super$bar() .

Semua 3 komentar

Di super , metode publik dan pribadi tersedia. Jadi dalam contoh Anda, Anda bisa menggunakan super$bar() .

Ah! Terima kasih banyak atas klarifikasi itu!

Bagus, senang itu membantu!

Apakah halaman ini membantu?
0 / 5 - 0 peringkat