Java経験者のKotlin コンストラクタ、インターフェース、継承

Javaのあの機能、Kotlinだとどう書くの?という視点でメモを残しておきます。


クラスの宣言


最小限の宣言は以下になります。

class [クラス名]



例)

class Some



コンストラクタの引数を取らず、sayというメソッドを持つクラス

  1. class Some {
  2.     fun say() {
  3.         println("Hello, World!")
  4.     }
  5. }
  6. fun main() {
  7.     // インスタンスを生成して直接使用
  8.     Some().say()
  9.     // 変数に入れてもよし newキーワードは不要
  10.     val s = Some()
  11.     s.say()
  12. }



コンストラクタで引数を取る場合、クラス名の後に()を付けて引数を記載。

  1. class Some(name: String) {
  2.     private val localname = name
  3.     fun say() {
  4.         println("Hello, $localname!")
  5.     }
  6. }
  7. fun main() {
  8.     // インスタンスを生成して直接使用
  9.     Some("Symfo").say()
  10. }



代入せず、引数を直接クラスのプライベート変数として割り当てることも可能です。

  1. class Some(private val name: String) {
  2.     fun say() {
  3.         println("Hello, $name!")
  4.     }
  5. }
  6. fun main() {
  7.     // インスタンスを生成して直接使用
  8.     Some("Ware").say()
  9. }





クラスの継承


クラスはデフォルトでjavaで言うところのfinalが付与されるようです。
継承可能なクラスとするには、classの前にopenキーワードを付与します。
継承先クラスでは、コロンに続いて継承元クラスのコンストラクターを指定します。

継承元クラス

open class [クラス名]



使用するクラス

class [クラス名] : [継承元クラス名]()




  1. open class Some(public val name: String) {
  2.     fun say() {
  3.         println("Hello, $name!")
  4.     }
  5. }
  6. class SomeEx(name: String) : Some(name) {
  7.     fun sayex() {
  8.         say()
  9.         println("こんにちは、$name")
  10.     }
  11. }
  12. fun main() {
  13.     // インスタンスを生成して直接使用
  14.     SomeEx("Ware").sayex()
  15. }





インターフェース


インターフェースの宣言は、interfaceです。
クラスの継承と同様、コロンの後に継承するインターフェースを記載します。


  1. interface Iface {
  2.     fun someFunction()
  3. }
  4. open class Some(public val name: String) : Iface{
  5.     fun say() {
  6.         println("Hello, $name!")
  7.     }
  8.     // Iface.someFunctionの実装部分
  9.     // overrideを付与
  10.     override fun someFunction() {
  11.     }
  12. }



クラスとインターフェース両方継承する場合は、継承クラスに続いてカンマで区切りクラス名を記載します。


  1. interface Iface {
  2.     fun someFunction()
  3. }
  4. open class Some(public val name: String) {
  5.     fun say() {
  6.         println("Hello, $name!")
  7.     }
  8. }
  9. class SomeEx(name: String) : Some(name), Iface {
  10.     fun sayex() {
  11.         say()
  12.         println("こんにちは、$name")
  13.     }
  14.     // Iface.someFunctionの実装部分
  15.     // overrideを付与
  16.     override fun someFunction() {
  17.     }
  18. }


関連記事

コメント

プロフィール

Author:symfo
blog形式だと探しにくいので、まとめサイト作成中です。
https://symfo.web.fc2.com/

PR

検索フォーム

月別アーカイブ