48 lines
1.2 KiB
Plaintext
48 lines
1.2 KiB
Plaintext
|
|
# Diamond Problem(菱形継承問題)テスト
|
|||
|
|
|
|||
|
|
print("=== Diamond Problem Test ===")
|
|||
|
|
|
|||
|
|
# 中間層
|
|||
|
|
box Middle from StringBox {
|
|||
|
|
init { middle_data }
|
|||
|
|
|
|||
|
|
birth(content) {
|
|||
|
|
from StringBox.birth(content)
|
|||
|
|
me.middle_data = "middle"
|
|||
|
|
print("Middle.birth called")
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
override toString() {
|
|||
|
|
print("Middle.toString called")
|
|||
|
|
return "Middle[" + from StringBox.toString() + "]"
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
# 多重委譲(問題のあるパターン)
|
|||
|
|
box Diamond from Middle, StringBox {
|
|||
|
|
init { diamond_data }
|
|||
|
|
|
|||
|
|
birth(content) {
|
|||
|
|
from Middle.birth(content)
|
|||
|
|
# from StringBox.birth(content) # これも必要?
|
|||
|
|
me.diamond_data = "diamond"
|
|||
|
|
print("Diamond.birth called")
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
override toString() {
|
|||
|
|
print("Diamond.toString called")
|
|||
|
|
# どちらも StringBox.toString() を呼ぶ
|
|||
|
|
local a = from Middle.toString() # Middle -> StringBox
|
|||
|
|
local b = from StringBox.toString() # 直接 StringBox
|
|||
|
|
return "Diamond[" + a + " | " + b + "]"
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
# テスト実行
|
|||
|
|
print("\n--- Creating diamond instance ---")
|
|||
|
|
local diamond = new Diamond("test")
|
|||
|
|
|
|||
|
|
print("\n--- Calling toString ---")
|
|||
|
|
print(diamond.toString())
|
|||
|
|
|
|||
|
|
print("\n=== Test completed ===")
|