Kotlin-クラスとオブジェクト

この章では、Kotlinを使用したオブジェクト指向プログラミング(OOP)の基本を学習します。クラスとそのオブジェクト、およびそのオブジェクトの操作方法について学習します。OOPの定義により、クラスはランタイムエンティティの青写真であり、オブジェクトはその動作と状態の両方を含む状態です。Kotlinでは、クラス宣言は、Javaと同様に、中括弧で囲まれたクラスヘッダーとクラス本体で構成されます。

Class myClass { // class Header 

   // class Body
}

Javaと同様に、Kotlinでもクラスの複数のオブジェクトを作成でき、そのクラスメンバーと関数を自由に含めることができます。第10章–可視性制御で学習するさまざまなキーワードを使用して、クラスメンバー変数の可視性を制御できます。次の例では、1つのクラスとそのオブジェクトを作成し、それを介してそのクラスのさまざまなデータメンバーにアクセスします。

class myClass {
   // property (data member)
   private var name: String = "Tutorials.point"
   
   // member function
   fun printMe() {
      print("You are at the best Learning website Named-"+name)
   }
}
fun main(args: Array<String>) {
   val obj = myClass() // create obj object of myClass class
   obj.printMe()
}

上記のコードは、ブラウザで次の出力を生成します。ここでは、独自のオブジェクトを使用してmyClassのprintMe()を呼び出しています。

You are at the best Learning website Named- Tutorials.point

ネストされたクラス

定義上、クラスが別のクラス内に作成されている場合、そのクラスはネストされたクラスと呼ばれます。Kotlinでは、ネストされたクラスはデフォルトで静的であるため、そのクラスのオブジェクトを作成せずにアクセスできます。次の例では、Kotlinがネストされたクラスをどのように解釈するかを確認します。

fun main(args: Array<String>) {
   val demo = Outer.Nested().foo() // calling nested class method
   print(demo)
}
class Outer {
   class Nested {
      fun foo() = "Welcome to The TutorialsPoint.com"
   }
}

上記のコードは、ブラウザに次の出力を生成します。

Welcome to The TutorialsPoint.com

インナークラス

ネストされたクラスが「内部」としてマークされている場合、それは内部クラスとして呼び出されます。内部クラスには、外部クラスのデータメンバーからアクセスできます。次の例では、外部クラスのデータメンバーにアクセスします。

fun main(args: Array<String>) {
   val demo = Outer().Nested().foo() // calling nested class method
   print(demo)
}
class Outer {
   private val welcomeMessage: String = "Welcome to the TutorialsPoint.com"
   inner class Nested {
      fun foo() = welcomeMessage
   }
}

上記のコードは、ブラウザーで次の出力を生成します。ここでは、コンパイル時にKotlinコンパイラーによって提供されるデフォルトのコンストラクターを使用してネストされたクラスを呼び出しています。

Welcome to the TutorialsPoint.com

匿名のインナークラス

匿名の内部クラスは、プログラマーの生活を非常に簡単にする非常に優れた概念です。インターフェイスを実装するときはいつでも、匿名の内部ブロックの概念が浮かび上がります。ランタイムオブジェクト参照を使用してインターフェイスのオブジェクトを作成するという概念は、匿名クラスとして知られています。次の例では、インターフェイスを作成し、AnonymousInnerクラスメカニズムを使用してそのインターフェイスのオブジェクトを作成します。

fun main(args: Array<String>) {
   var programmer :Human = object:Human // creating an instance of the interface {
      override fun think() { // overriding the think method
         print("I am an example of Anonymous Inner Class ")
      }
   }
   programmer.think()
}
interface Human {
   fun think()
}

上記のコードは、ブラウザに次の出力を生成します。

I am an example of Anonymous Inner Class

タイプエイリアス

タイプエイリアスはKotlinコンパイラのプロパティです。これは、既存のタイプの新しい名前を作成する柔軟性を提供します。新しいタイプは作成しません。タイプ名が長すぎる場合は、簡単に短い名前を導入して、将来の使用に使用できます。型エイリアスは、複雑な型に非常に役立ちます。最新バージョンでは、Kotlinは型エイリアスのサポートを取り消しましたが、古いバージョンのKotlinを使用している場合は、次のように使用している可能性があります。

typealias NodeSet = Set<Network.Node>
typealias FileTable<K> = MutableMap<K, MutableList<File>>