再次覆寫烹調功能
一旦中介類別透過 super_ 活動繫結(active binding)曝露了其父類別的功能,你就能跨越多個世代的 R6 類別來存取方法。語法如下:
parent_method <- super$method()
grand_parent_method <- super$super_$method()
great_grand_parent_method <- super$super_$super_$method()
本練習屬於課程
在 R 中使用 S3 與 R6 的物件導向程式設計
練習說明
微波爐與高級微波爐的類別已預先在你的工作環境中定義好。字串 ascii_pizza_slice 也已預先定義。
- 先列印其他微波爐工廠的名稱來探索它們。
- 使用
R6Class()(文件)定義一個HighEndMicrowaveOven類別產生器,並指定給high_end_microwave_oven_factory。- 它應該從
FancyMicrowaveOven繼承。 - 它應該有一個
public清單元素。
- 它應該從
- 覆寫 public 的
cook()方法。- 該方法只接受一個名為
time_seconds的引數。 - 它應該先呼叫
MicrowaveOven的cook()方法,…… - 然後用
message(ascii_pizza_slice)(文件)顯示一片披薩。
- 該方法只接受一個名為
- 具現化一個高階微波爐物件並指定給
a_high_end_microwave。 - 呼叫
a_high_end_microwave的cook()方法,烹調 1 秒。
動手互動練習
試著完成這個範例程式碼,體驗一下這個練習。
# Explore other microwaves
microwave_oven_factory
fancy_microwave_oven_factory
# Define a high-end microwave oven class
high_end_microwave_oven_factory <- ___(
"___",
___ = ___,
___ = ___(
___ = ___
)
)
# Instantiate a high-end microwave oven
a_high_end_microwave <- ___
# Use it to cook for one second
___