// 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";
}
}
Ly8gSW50ZXJmYWNlIGRlY2xhcmF0aW9uCmludGVyZmFjZSBBbmltYWwgCnsKICBmdW5jdGlvbiBzcGVhaygpOiBTdHJpbmcKICBmdW5jdGlvbiBtb3ZlKCk6IFN0cmluZwp9Ci8vIEFic3RyYWN0IGNsYXNzIHBhcnRpYWxseSBpbXBsZW1lbnRpbmcgQW5pbWFsCmFic3RyYWN0IGNsYXNzIE1hbW1hbCBpbXBsZW1lbnRzIEFuaW1hbAp7CiAgdmFyIG5hbWU6IFN0cmluZwoKICBjb25zdHJ1Y3QobmFtZUlucHV0OiBTdHJpbmcpIAogIHsKICAgIHRoaXMubmFtZSA9IG5hbWVJbnB1dAogIH0KCiAgLy8gQWJzdHJhY3QgbWV0aG9kIC0gbXVzdCBiZSBpbXBsZW1lbnRlZCBieSBzdWJjbGFzcwogIGFic3RyYWN0IGZ1bmN0aW9uIHNwZWFrKCk6IFN0cmluZwoKICAvLyBDb25jcmV0ZSBtZXRob2QKICBmdW5jdGlvbiBtb3ZlKCk6IFN0cmluZyAKICB7CiAgICByZXR1cm4gIiR7bmFtZX0gd2Fsa3Mgb24gbGFuZCI7CiAgfQp9