using System;
namespace Animals {
abstract class Animal {
protected string name;
public Animal(string name) {
this.name = name;
}
public virtual void play() { }
}
class Dog : Animal {
public Dog(string name) : base(name) {
}
public override void play() {
Console.WriteLine("わんわん!" + name + "だよ");
}
}
class Cat : Animal {
private int sleep;
public Cat(string name, int sleep) : base(name) {
this.sleep = sleep;
}
public override void play() {
Console.WriteLine("にゃあ!" + name + "だよ");
if(sleep == 1) {
Console.WriteLine("...でも寝る");
}
}
}
class Pet {
static void Main(string[] args) {
Animal[] pets = {
new Dog("ぽち"),
new Cat("たま", 1)
};
foreach(Animal pet in pets) {
pet.play();
}
}
}
}
dXNpbmcgU3lzdGVtOwoKbmFtZXNwYWNlIEFuaW1hbHMgewogICAgYWJzdHJhY3QgY2xhc3MgQW5pbWFsIHsKICAgICAgICBwcm90ZWN0ZWQgc3RyaW5nIG5hbWU7CiAgICAgICAgCiAgICAgICAgcHVibGljIEFuaW1hbChzdHJpbmcgbmFtZSkgewogICAgICAgICAgICB0aGlzLm5hbWUgPSBuYW1lOwogICAgICAgIH0KICAgICAgICAKICAgICAgICBwdWJsaWMgdmlydHVhbCB2b2lkIHBsYXkoKSB7IH0KICAgIH0KICAgIAogICAgY2xhc3MgRG9nIDogQW5pbWFsIHsKICAgICAgICBwdWJsaWMgRG9nKHN0cmluZyBuYW1lKSA6IGJhc2UobmFtZSkgewogICAgICAgIH0KICAgICAgICAKICAgICAgICBwdWJsaWMgb3ZlcnJpZGUgdm9pZCBwbGF5KCkgewogICAgICAgICAgICBDb25zb2xlLldyaXRlTGluZSgi44KP44KT44KP44KT77yBIiArIG5hbWUgKyAi44Gg44KIIik7CiAgICAgICAgfQogICAgfQogICAgCiAgICBjbGFzcyBDYXQgOiBBbmltYWwgewogICAgICAgIHByaXZhdGUgaW50IHNsZWVwOwogICAgICAgIAogICAgICAgIHB1YmxpYyBDYXQoc3RyaW5nIG5hbWUsIGludCBzbGVlcCkgOiBiYXNlKG5hbWUpIHsKICAgICAgICAgICAgdGhpcy5zbGVlcCA9IHNsZWVwOwogICAgICAgIH0KICAgICAgICAKICAgICAgICBwdWJsaWMgb3ZlcnJpZGUgdm9pZCBwbGF5KCkgewogICAgICAgICAgICBDb25zb2xlLldyaXRlTGluZSgi44Gr44KD44GC77yBIiArIG5hbWUgKyAi44Gg44KIIik7CiAgICAgICAgICAgIGlmKHNsZWVwID09IDEpIHsKICAgICAgICAgICAgICAgIENvbnNvbGUuV3JpdGVMaW5lKCIuLi7jgafjgoLlr53jgosiKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICBjbGFzcyBQZXQgewogICAgICAgIHN0YXRpYyB2b2lkIE1haW4oc3RyaW5nW10gYXJncykgewogICAgICAgICAgICBBbmltYWxbXSBwZXRzID0gewogICAgICAgICAgICBuZXcgRG9nKCLjgb3jgaEiKSwKICAgICAgICAgICAgbmV3IENhdCgi44Gf44G+IiwgMSkKICAgICAgICAgICAgfTsKICAgICAgICAKICAgICAgICAgICAgZm9yZWFjaChBbmltYWwgcGV0IGluIHBldHMpIHsKICAgICAgICAgICAgICAgIHBldC5wbGF5KCk7CiAgICAgICAgICAgIH0KICAgICAgICAKICAgICAgICB9CiAgICB9Cn0K