study-note

7. 継承

目次


継承の基本構文

Scalaのクラスはextendsキーワードで継承する

class Animal {
  def speak(): String = "..."
}

class Dog extends Animal {
  override def speak(): String = "Woof!"
}

参照:サンプルコード


コンストラクタの継承

親クラスにコンストラクタがある場合、子クラスで明示的に呼び出す

class Animal(val name: String) {
  def speak(): String = "..."
}

class Dog(name: String) extends Animal(name) {
  override def speak(): String = s"$name says Woof!"
}


抽象クラス


トレイト(trait)

trait Greeter {
  def greet(name: String): String = s"Hello, $name!"
}

使い方

class EnglishGreeter extends Greeter

val greeter = new EnglishGreeter()
println(greeter.greet("ユーザー"))  // Hello, ユーザー!

複数トレイトのミックスイン

trait Friendly {
  def beFriendly(): String = "I'm friendly!"
}

trait Polite {
  def bePolite(): String = "Nice to meet you."
}

class Person extends Friendly with Polite

val p = new Person()
println(p.beFriendly())  // I'm friendly!
println(p.bePolite())    // Nice to meet you.

トレイトに抽象メソッド

trait Speaker {
  def speak(): String  // 実装なし
}


参照:サンプルコード


型クラス・暗黙パラメータ



参照:サンプルコード


8. FP(関数型プログラミング)