0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

ポリモーフィズムをScalaで説明してみる

0
Last updated at Posted at 2018-12-17

最近、Scalaの勉強を初めて、改めて書籍を読み進めているのだが、その際にオブジェクト思向の概念の1つである、ポリモーフィズムについてのテーマがあり、もう一度概念を抑えておきたく思い、ここに記す事にした。
ちなみにScalaは、オブジェクト指向型であり、関数型でもある、マルチパラダイムな言語である。

ポリモーフィズムとは

ポリモーフィズムとは、継承したサブクラスによって異なる動作を実装する仕組み。複数のインスタンスで同じメソッドを呼び出し、それぞれに合った実装を呼び出す事ができる。

実際にポリモーフィズムをコードで説明してみる

今回、例として、「図形」、「三角形」、「四角形」を表すクラスを表現する事を考えてみる。drawメソッドを呼び出す事で、
その図形の形を出力してくれるものとする。

abstract class shape {
  def draw(): Unit = {
    println('不明な図形')
  }
}

class Triangle extends shape {
  override def draw():Unit = {
    println('三角形')  
  }
}

class Rectangle extends shape {
  override def draw():Unit = {
    println('四角形')
  }
}

最初に抽象クラスであり、スーパークラスである、shapeを定義している。これに対して、Triangleクラスと、Rectangleクラスを定義した。extendsを使って、スーパークラスである、shapeクラスのサブクラスとして、定義している。また、各々2つのサブクラス内のメソッド定義時に、overrideする事で、スーパークラスのメソッドをオーバーライドしている。

var shape:Shape = new Triangle 
shape.draw() //三角形

var shape:Shape = new Rectangle
shape.draw() //四角形

ポリモーフィズムの何が便利か

ポリモーフィズムを実現する事により、オブジェクト思向における再利用性が高まるのと同時に、サブクラスのメソッドを同じ方法で呼び出す事ができる。

ポリモーフィズムを使わない実装をすると、TriangleクラスとRectangleクラス各々で、新たに別のメソッドを新規に作成する事になってしまう。
これらを踏まえて冗長なコーディングがないように心がけたい。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?