
// ユーザー定義Box同士でのデリゲーションテスト
box Parent {
    init { value }
    
    init(value) {  # init構文に統一
        me.value = value
    }
    
    getValue() {
        return me.value
    }
    
    process(x) {
        return "Parent processing: " + x
    }
}

box Child from Parent {
    init { extra }
    
    init(value, extra) {  # init構文に統一
        from Parent.init(value)  # 親コンストラクタ呼び出し
        me.extra = extra
    }
    
    override process(x) {  // 明示的オーバーライド
        local result
        result = from Parent.process(x)  // 親メソッド呼び出し
        return result + " (Child added: " + me.extra + ")"
    }
    
    getAll() {
        return me.getValue() + " / " + me.extra
    }
}

// テスト実行
local p, c
p = new Parent("parent value")
print("Parent getValue: " + p.getValue())
print("Parent process: " + p.process("test"))

c = new Child("child value", "extra data")
print("Child getValue: " + c.getValue())  // デリゲートされたメソッド
print("Child process: " + c.process("test"))  // オーバーライドされたメソッド
print("Child getAll: " + c.getAll())

