--attrs and methods with heirarchy Class D inherits A { a:String; --not allowed b:Int; --allowed b():Int{ --undefined type a }; }; Class C inherits B { a:Int; --not allowed b:Bool; --not allowed a():Bool { 1 }; b():Char{ --undefined types and repeated from B a }; }; Class B inherits A{ a:Int; -- not allowed b:Bool; a():Bool{ --not allowed 1 }; b():Char{ --undefined types a }; q(i:Int):Int{ --different ret type true }; q(i:Bool):Object{ --different param type 1 }; q(i:Boo):Object{ --undef param type r }; t(i:Boo):Int{ --undef param type r }; y(i:Boo):Int{ --undef param type (new A).r() }; }; Class A{ a:Int; r:Int; a():Int{ a<-1 }; q(i:Int):Object{ 1 }; }; (* Class Main { main():C { (new C).init(1,true) }; main():C { --method redefined (new C).init(1,true) }; }; *)