フリーランス 技術調査ブログ

フリーランス/エンジニア Ruby Python Nodejs Vuejs React Dockerなどの調査技術調査の備忘録

kotlin覚えたメモ④(クラスの基本)

クラスの基本

  • Kotlinでクラスを定義するには以下のように書く
class User {
  var lastName = ""
  var fistName = ""
  var age = 0

  fun introduction() {
    println("Name ${fistName} ${lastName}です。${age}さい")
  }
}

fun main() {
  val user = User()
  user.lastName = "山田"  
  user.fistName = "太郎"
  user.age = 44
  user.introduction()
}

アクセス修飾子

修飾子 概要
public 全てのクラスからアクセスが可能
protected 定義されたクラスとそのサブクラスからののみアクセスが可能
internal 同じモジュール内のクラスから飲みアクセス可能
private 定義されたクラスからのみアクセスが可能
  • アクセス修飾子を指定した例
class User {
  var lastName = ""
  var fistName = ""
  private var age = 0

  fun introduction() {
    println("Name ${fistName} ${lastName}です。${age}さい")
  }

  protected hoge () {
    println("外部から呼べない")
  }
}

fun main() {
  val user = User()
  user.lastName = "山田"  
  user.fistName = "太郎"
  user.age = 44
  user.introduction()
}

プロパティ

  • プロパティはただ単にクラスが持つ変数ではなく、それ自体がアクセサーを持つ
  • アクセサーは値の取得・設定を行うシンプルなメソッドのこと。getter(取得)/setter(設定)
  • アクセサーの引数は慣例的にvalueを用いる
  • fieldはバッキングフィールドと呼ばれる
class User {
  var lastName = ""
  var fistName = ""
  var age = 0
    set(value) {
      if (value < 0) {
        println("年齢が不正です。")    
      } else {
        field = value
      }
    }
    get() {
      "${field}00"
    }


  fun introduction() {
    println("Name ${fistName} ${lastName}です。${age}さい")
  }
}

fun main() {
  val user = User()
  user.lastName = "山田"  
  user.fistName = "太郎"
  user.age = -10
  user.introduction()
}

コンストラク

プライマリコンストラク

class User constructor(var lastName: String, var fistName: String, var age: Int) {
  fun introduction() {
    println("Name ${fistName} ${lastName}です。${age}さい")
  }
}

fun main() {
  val user = User("山田","太郎", 20)
  user.introduction()
}

セカンダリコンストラク

class User constructor(var lastName: String, var fistName: String, var age: Int) {
  constructor(lastName: String,fistName: String):this(lastName, fistName, 20) {}
  constructor(lastName: String):this(lastName, "太郎", 20) {}
  constructor():this("山田") {}
  fun introduction() {
    println("Name ${fistName} ${lastName}です。${age}さい")
  }
}

fun main() {
  // 全部同じ結果になります。
  var user = User("山田","太郎", 20)
  user.introduction()
  user = User("山田","太郎")
  user.introduction()
  user = User("山田")
  user.introduction()
}