元ひよっこSEがフルスタックエンジニアを目指すブログ

大学院(情報系)修了後、新卒で大手SIer入社。のちに事業会社(WEB系)に転職。SIerから事業会社に転職してからの日常と学んだこととかを書いていこうかと思う。

【Ruby】抽象クラスを作る

もともとAndroidのアプリを作っていたということもあってJavaを長くやっていたのですが、最近はrubyがメイン。
で抽象クラス作ろうと思ったら、rubyにはそんなものはなかった。

親クラスのメソッドで例外を投げることで、擬似的なことはできるらしい。

class Human
 def eat
  raise 'メソッドオーバライドして'
 end
end

class Taro < Human
def eat
  puts '食べる'
 end
end

class Jiro < Human
end

Taro.new.eat
Jiro.new.eat

eatメソッドで例外を投げるようにした。
Taroはeatメソッドをオーバライドしているが、Jiroはしてない。
その状態でeatを呼び出す。

食べる
a.rb:3:in `eat': メソッドオーバライドして (RuntimeError)
	from a.rb:17:in `<main>'

ほほーん。
しかし、Javaだとコンパイルの段階かEclipseがメソッド実装してないぞ的なことをエラーとして吐いてくれてた気がするのだけど、
これって呼ばれないと気がつかないんじゃない?
抽象メソッドの実装を強制するという意味ではどうなんだろうか・・・