Kernel.class_eval do #FIXME this is terrible def static(meth) define_singleton_method(meth) do |*args, &b| new.send meth, *args, &b end meth end def abstract(meth) define_method(meth) { raise "Please implement #{self.class.name}##{meth}." } meth end def final(meth) self.extend Module.new { define_method(:method_added) {|added_meth| raise("Overriding or redefining #{meth} is prohibited.") if added_meth == meth; super(added_meth); } } meth end def native(meth) meth end def friend(meth) #TODO meth end def synchronized(meth) #TODO meth end def void(meth) meth end def virtual(meth) meth end def override(meth) raise "#{self.name}##{meth} is not defined." unless ancestors[1..-1].any? {|a| a.method_defined? meth } meth end end class Hello abstract void def aaa p :aaaaa end public static final void def main(*) puts 'hello, world' end end class Hello2 < Hello override def aaa p 'hello2' end end Hello2.new.aaa Hello.main #=> hello, world