基本文法について説明しました。今回はクラスに関するものを説明します。ようなデータ型になります。Kotlin公式ドキュメントには書かれていません。いうクラスを定義してみます。}オブジェクトを作るクラスを定義しただけではオブジェクトは作られません。クラスをもとにオブジェクトを作るには、クラス名()とします。オブジェクトは何もデータを持っていません。オブジェクトを「名前とメールアドレスを保持しているもの」と決めてみましょう。この「名前」や「メールアドレス」にあたるものをプロパティと呼びます。""}プロパティを読み書きするプロパティを読み書きするには、(オブジェクトが入っている変数名).(プロパティ名)とし、変数のように扱います。"moke@example.com"println("メールアドレスは${a.email})コンストラクタを作るオブジェクトを作る際、同時にプロパティにデータを入れておくとデータの入れ忘れが防止できます。そのための仕組みとしてコンストラクタというものがあります。}クラス名の直後に、関数の引数のように記述します。このようにして定義したコンストラクタをプライマリーコンストラクタと呼びます。コンストラクタを追加したので、オブジェクトを作る場面は次のようになります。プロパティのセット忘れが防止できています。"moke@example.com")println("メールアドレスは${a.email}")「コンストラクタでデータを受け取り、それをそのままプロパティにセットする」という場面はとても多いです。次のようにプロパティ定義もまとめてプライマリーコンストラクタで行う構文が用意されています。別のクラスを元にして新しいクラスを作る機能をクラスの継承と呼びます。元にするクラスをスーパークラスと呼びます。スーパークラス名()とします。ついている必要があります。ついていないクラスを継承しようとした場合、次のようなコンパイルエラーが発生します。varプロパティはコンストラクタの引数で初期化するか、初期値をいれておく必要があります。onCreate()でやる場面がいくつかあります。いれておく方法がぱっと思いつきます。チェックが必要となってしまいます。して扱わせてね」といった動作になります。initializedメソッドメソッドとはオブジェクトに対し、どのような命令/質問ができるかを記述したものです。{}の中には呼ばれたときの処理を記述します。}}メソッドを定義しただけでは中身は実行されません。メソッドを呼び、中身を実行してもらうには(オブジェクトが入っている変数名).メソッド名()とします。増やす」メソッドになっています。ある場合はどうでしょう。"piyo@example.com")b.increaseLoginCount()b.increaseLoginCount()println("aは${a.loginCount}回ログインしたよ")println("bは${b.loginCount}回ログインしたよ")実行すると、次のように表示されます。Aを次のように定義したとします。sayHello()が呼べます。ついているメソッドは次のようにオーバーライド(上書き)ができます。上書きなので引数の種類や型を変更してはいけません。super.メソッド名()とします。onCreate()など、一部のメソッドはスーパークラスのメソッドを呼ばないと実行時にエラーとなるものがあるので呼び方を覚えておきましょう。}}抽象クラスと抽象メソッドクラスはオブジェクトを作るための設計書ですが、時には「継承されること前提」のクラスを定義したい場合もあります。継承したクラスのオブジェクトに対し、sayHello()が呼べるよ。どんな処理をするかは継承先に聞いてね」という扱いになります。いうコンパイルエラーが発生します。ついている抽象メソッドはすべてオーバーライドしなければなりません。}}もしオーバーライド忘れがあった場合、次のようなコンパイルエラーが発生します。main.A抽象クラスはうまく使わないと混乱の元となります。データ型の設計をする際、次に紹介するインターフェースで十分かどうかを検討しましょう。インターフェースオブジェクトの利用について考えてみましょう。静的型付け言語なので、変数には型がついています。オブジェクトを利用する際は「この型のオブジェクトが必要」と事前に宣言しておく必要があります。クラスは型ですが、メソッドでの処理内容も型の情報として含まれてしまいます。オブジェクトを使う側は処理内容まで気にする必要のないことがあります。次のようにデータの保存処理を記述したとします。いうオブジェクトを使ってデータを保存することです。データが保存できていれば、どのように保存されるかは興味がありません。次のようなクラスであった場合、saveMyData()は「データをファイルに保存することのできるオブジェクト」が必要という意味になってしまいます。}}ここで登場するのがインターフェースという仕組みです。クラスと同様に型ですが、オブジェクトに対し呼べるメソッドの形だけを定義したものになります。GameData)}インターフェースを実装するインターフェースはメソッドの形しか定義していないので、実際に呼ばれた時の処理をどこかに記述しないといけません。インターフェースで定義されているメソッドの処理を記述することを実装すると呼びます。インターフェースを実装する例です。クラスの継承と似ていますが、()を付けない点が異なります。型の変数に代入することができます。A()s.save(GameData(1))ボタンをタップしたときのリスナーなど、わざわざクラスを定義したくない場面もあるでしょう。インターフェース名とすることで、無名クラスで実装することができます。クラスに関する言語機能について説明しました。公式ドキュメントは、クラスやインターフェースがどのようなものかを知っている前提で記述されているようなので、本記事が学習の参考になれば幸いです。Analyticsを導入しています。分析にはCookieを利用しています。