study-note

6. クラス

目次


クラス定義とコンストラクタ

Javaと異なり、Scalaではコンストラクタとクラス定義が一体化されている

class Person(name: String, age: Int) {
  def greet(): String = s"Hi, my name is $name and I am $age years old."
}


参照:サンプルコード


case class(データクラス)

case class User(id: Int, name: String)

case classを定義すると、以下のメソッドが自動生成される

apply

unapply

toString

case class User(name: String, age: Int)
val u = User("Alice", 20)
println(u.toString) // → User(Alice,20)

equals

User("Alice", 20) == User("Alice", 20)  // → true

hashCode

val u = User("Alice", 20)
println(u.hashCode)

copy

val u1 = User("Alice", 20)
val u2 = u1.copy(age = 30)  // nameはそのまま、ageだけ変更


参照:サンプルコード


オブジェクト

参照:サンプルコード


コンパニオンオブジェクト


参照:サンプルコード

applyの役割

unapplyの役割


参照:サンプルコード


7. 継承