abstract class
抽象クラスです。ActiveRecord::Baseなどがそうです。
> ActiveRecord::Base.new NotImplementedError: ActiveRecord::Base is an abstract class and cannot be instantiated.
「抽象クラスである」という判別がRubyによりなされているわけではなく、ActiveRecord::Baseは抽象クラスだからインスタンス化できないよ、と書いてます。このコードの50行目です。
抽象クラスは継承関係について、オブジェクト指向のデザインパターンです。
スーパークラスでは何もしないメソッドを定義して、同じ名前のメソッドを子クラスで作ることによりプログラムの構造を分かりやすくします。
以下はRubyでの例です。
class AbstractClass def initialize raise "this class cannot be instantiated" end def bark raise "this is abstract class" end end class Dog < AbstractClass def bark puts "wan" end end class Cat < AbstractClass def bark puts "nya" end end > dog = Dog.new > dog.bark "wan" > cat = Cat.new > cat.bark "nya"
ここで、AbstractClassのbarkメソッドは抽象メソッドと呼ばれます。抽象メソッドは必ず子クラスで実装されなければいけません。