// Interface declaration
interface Animal
{
function speak(): String
function move(): String
}
// Abstract class partially implementing Animal
abstract class Mammal implements Animal
{
var name: String
construct(nameInput: String)
{
this.name = nameInput
}
// Abstract method - must be implemented by subclass
abstract function speak(): String;
// Concrete method
function move(): String
{
return "${name} walks on land";
};
}
ICAgIC8vIEludGVyZmFjZSBkZWNsYXJhdGlvbgogICAgaW50ZXJmYWNlIEFuaW1hbCAKICAgIHsKICAgICAgZnVuY3Rpb24gc3BlYWsoKTogU3RyaW5nCiAgICAgIGZ1bmN0aW9uIG1vdmUoKTogU3RyaW5nCiAgICB9CiAgICAvLyBBYnN0cmFjdCBjbGFzcyBwYXJ0aWFsbHkgaW1wbGVtZW50aW5nIEFuaW1hbAogICAgYWJzdHJhY3QgY2xhc3MgTWFtbWFsIGltcGxlbWVudHMgQW5pbWFsCiAgICB7CiAgICAgIHZhciBuYW1lOiBTdHJpbmcKICAgICAKICAgICAgY29uc3RydWN0KG5hbWVJbnB1dDogU3RyaW5nKSAKICAgICAgewogICAgICAgIHRoaXMubmFtZSA9IG5hbWVJbnB1dAogICAgICB9CiAgICAgCiAgICAgIC8vIEFic3RyYWN0IG1ldGhvZCAtIG11c3QgYmUgaW1wbGVtZW50ZWQgYnkgc3ViY2xhc3MKICAgICAgYWJzdHJhY3QgZnVuY3Rpb24gc3BlYWsoKTogU3RyaW5nOwogICAgIAogICAgICAvLyBDb25jcmV0ZSBtZXRob2QKICAgICAgZnVuY3Rpb24gbW92ZSgpOiBTdHJpbmcgCiAgICAgIHsKICAgICAgICByZXR1cm4gIiR7bmFtZX0gd2Fsa3Mgb24gbGFuZCI7CiAgICAgIH07CiAgICB9