106 lines
2.8 KiB
Plaintext
106 lines
2.8 KiB
Plaintext
|
|
// 🔥 FromCall実装テスト - Override + From統一構文によるデリゲーション革命
|
||
|
|
|
||
|
|
// 親クラス定義
|
||
|
|
box Animal {
|
||
|
|
init { name, sound }
|
||
|
|
|
||
|
|
constructor() {
|
||
|
|
me.name = "Unknown Animal"
|
||
|
|
me.sound = "Silent"
|
||
|
|
}
|
||
|
|
|
||
|
|
constructor(animalName) {
|
||
|
|
me.name = animalName
|
||
|
|
me.sound = "Unknown Sound"
|
||
|
|
}
|
||
|
|
|
||
|
|
makeSound() {
|
||
|
|
local console
|
||
|
|
console = new ConsoleBox()
|
||
|
|
console.log(me.name + " makes " + me.sound)
|
||
|
|
return me.sound
|
||
|
|
}
|
||
|
|
|
||
|
|
getName() {
|
||
|
|
return me.name
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
// 子クラス定義(デリゲーション関係)
|
||
|
|
box Dog : Animal {
|
||
|
|
init { breed }
|
||
|
|
|
||
|
|
constructor() {
|
||
|
|
// 親コンストラクタを呼び出し
|
||
|
|
from Animal.constructor()
|
||
|
|
me.sound = "Woof!"
|
||
|
|
me.breed = "Mixed"
|
||
|
|
}
|
||
|
|
|
||
|
|
constructor(dogName, dogBreed) {
|
||
|
|
// 引数付き親コンストラクタを呼び出し
|
||
|
|
from Animal.constructor(dogName)
|
||
|
|
me.sound = "Woof!"
|
||
|
|
me.breed = dogBreed
|
||
|
|
}
|
||
|
|
|
||
|
|
// override: 親メソッドをオーバーライド
|
||
|
|
makeSound() {
|
||
|
|
// 親メソッドを呼び出し
|
||
|
|
local parentSound
|
||
|
|
parentSound = from Animal.makeSound()
|
||
|
|
|
||
|
|
// 追加の処理
|
||
|
|
local console
|
||
|
|
console = new ConsoleBox()
|
||
|
|
console.log("This is a " + me.breed + " breed!")
|
||
|
|
return parentSound
|
||
|
|
}
|
||
|
|
|
||
|
|
getBreed() {
|
||
|
|
return me.breed
|
||
|
|
}
|
||
|
|
|
||
|
|
// 親のgetNameを呼び出すテスト
|
||
|
|
getFullInfo() {
|
||
|
|
local parentName
|
||
|
|
parentName = from Animal.getName()
|
||
|
|
return parentName + " (" + me.breed + ")"
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
// 静的メインクラス
|
||
|
|
static box Main {
|
||
|
|
init { console }
|
||
|
|
|
||
|
|
main() {
|
||
|
|
me.console = new ConsoleBox()
|
||
|
|
me.console.log("🔥 FromCall Implementation Test Starting...")
|
||
|
|
|
||
|
|
// テスト1: デフォルトコンストラクタ
|
||
|
|
local dog1
|
||
|
|
dog1 = new Dog()
|
||
|
|
me.console.log("Test 1 - Default Constructor:")
|
||
|
|
dog1.makeSound()
|
||
|
|
me.console.log("Name: " + dog1.getName())
|
||
|
|
me.console.log("Breed: " + dog1.getBreed())
|
||
|
|
me.console.log("")
|
||
|
|
|
||
|
|
// テスト2: 引数付きコンストラクタ
|
||
|
|
local dog2
|
||
|
|
dog2 = new Dog("Buddy", "Golden Retriever")
|
||
|
|
me.console.log("Test 2 - Parameterized Constructor:")
|
||
|
|
dog2.makeSound()
|
||
|
|
me.console.log("Full Info: " + dog2.getFullInfo())
|
||
|
|
me.console.log("")
|
||
|
|
|
||
|
|
// テスト3: 親メソッド直接呼び出し
|
||
|
|
me.console.log("Test 3 - Direct parent method call:")
|
||
|
|
local directAnimal
|
||
|
|
directAnimal = new Animal("Cat")
|
||
|
|
directAnimal.makeSound()
|
||
|
|
|
||
|
|
me.console.log("🎉 FromCall Implementation Test Completed!")
|
||
|
|
return "FromCall Revolution Success!"
|
||
|
|
}
|
||
|
|
}
|