DesignAssembler

備忘録に近い

abstract class

抽象クラスです。ActiveRecord::Baseなどがそうです。

>   ActiveRecord::Base.new
NotImplementedError: ActiveRecord::Base is an abstract class and cannot be instantiated.

「抽象クラスである」という判別がRubyによりなされているわけではなく、ActiveRecord::Baseは抽象クラスだからインスタンス化できないよ、と書いてます。このコードの50行目です。

github.com

抽象クラスは継承関係について、オブジェクト指向デザインパターンです。

スーパークラスでは何もしないメソッドを定義して、同じ名前のメソッドを子クラスで作ることによりプログラムの構造を分かりやすくします。

以下は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メソッドは抽象メソッドと呼ばれます。抽象メソッドは必ず子クラスで実装されなければいけません。

参考

www.javadrive.jp

qiita.com