#!/usr/bin/ruby
#
## Class inheritance
#
class Animal {
method is_animal {
return true;
}
}
class Mammals < Animal {
method legs_num {
return 4;
}
method type {
return 'mammal';
}
}
class Primates < Mammals, Animal {
method has_tail {
return true;
}
}
class Dog() < Mammals {
method speak {
return "Ham-Ham!";
}
}
class Human < Primates {
method speak {
return "Hello!";
}
method legs_num {
return 2;
}
method has_tail {
return false;
}
}
var dog = Dog();
say "Dog is a #{dog.type}, has #{dog.legs_num} legs and says '#{dog.speak}'";
var human = Human();
say "Human is a #{human.type}, has #{human.legs_num} legs and says '#{human.speak}'";
assert_eq(human.is_animal, true);
assert_eq(dog.is_animal, true);
assert_eq(human.has_tail, false);
assert_eq(human.legs_num, 2);
assert_eq(dog.legs_num, 4);
assert_eq(human.speak, 'Hello!');