Kotlin トピック「Sixteen」: ネストされたクラスと内部クラス

はじめに: 何かを手に入れようと懸命に努力することは、実際のところ、冷静で現実的であれば、誰にも気付かれずに簡単に目標を達成することができます。しかし、あまりにも力を入れすぎたり、騒ぎすぎたり、あまりにも幼稚で、あまりにも経験が浅い場合は、テーブルクロスを引く子供のように、泣いたり、つかんだり、引っ張ったりしますが、何も得られません。机上の良いものをすべて地面に引きずり下ろしても、それは決して手に入らないのです。

1. 入れ子になったクラス

クラスは他のクラス内にネストできます。

    class Outer {
    
    
        private val number: Int = 1

        class Nested {
    
    
            fun foo() = 2
            //嵌套类不能访问外部了的私有或公有成员
        }
    }

	//调用
	 val nest = Outer.Nested().foo()//nest == 2

呼び出し形式は次​​のとおりです: 外部クラス. ネストされたクラス (). ネストされたクラスのメソッド/プロパティ.

Nested クラスは、Outer クラス内にネストされており、これをネスト クラスと呼びます。Outer クラスは、Nested クラスに対して相対的な外部クラスです。ネストされたクラスには、外部クラスを通じて直接アクセスできますが、外部のプライベート メンバーやパブリック メンバーにはアクセスできません。

第二に、内部クラス

Kotlin では、innerマークされたネストされたクラスのみが内部クラスと呼ばれ、クラス内に記述された他のクラスは総称してネストされたクラスと呼ばれます。内部クラスは他の外部クラスのメンバーにアクセスでき、内部クラスは外部クラスのオブジェクトを参照します。

    class Outer {
    
    
        private val number: Int = 0

		//被 `inner` 标记的嵌套类才叫内部类
        inner class Inner {
    
    
            fun foo() = number//内部类可以访问外部类私有成员
        }
    }

    val inner = Outer().Inner().foo()//inner == 0

内部クラスは外部クラスのインスタンスを通じてのみアクセスでき、外部クラスのメンバーにアクセスできます。呼び出し形式は次​​のとおりです: 外部クラス(). 内部クラス(). 内部クラスのメソッド/プロパティ。

3. 匿名の内部クラス

親実装のサブクラスを明示的に定義してオブジェクトを作成するのではなく、親実装を通じて名前のないオブジェクトを直接作成します。このオブジェクトは、インターフェイスまたは抽象クラスを参照する匿名の内部クラスです。匿名の内部クラス インスタンスは、オブジェクト式を使用して作成されます。

   //抽象类
  abstract class MyAdapter {
    
    
        open fun mouseClicked() {
    
    }//open 修饰,子类可重写
    }

	//调用匿名内部类
	fun test(){
    
    
	    object : MyAdapter() {
    
    //Kotlin 匿名内部类的写法:object + 冒号":" + 类名
            override fun mouseClicked() {
    
    
                println("MyAdapter == mouseClicked")
            }
        }
	}

Kotlin では、匿名内部クラスを実装するために object キーワードが導入されています。このキーワードは Java の Object クラスではありません。関連する使用法については後で説明します。

注: JVM では、オブジェクトが関数型 Java インターフェイス (つまり、単一の抽象メソッドを持つ Java インターフェイス) のインスタンスである場合、インターフェイスの型をプレフィックスとして付けたラムダ式を使用してオブジェクトを作成できます。

val listener = View.OnClickListener {
    
     println("View.OnClickListener") }

View.OnClickListener には 1 つの抽象メソッドがあります。

4、ローカルクラス

Kotlin の部分クラスは Java の部分クラス、つまりメソッド (関数) で定義されたクラスと同じです。

    class Outer {
    
    
        private val number: Int = 0

        fun memberMethod() {
    
    
            class Part {
    
    //局部类
                var numPart = number
                var name: String = "Part"

                fun partMethod() {
    
    
                    println("我是局部类中的方法")
                }
            }

            val part = Part()
            println("name == $name  |  numPart == " + part.numPart)
            part.partMethod()
        }
    }
    
	//调用
	Outer().memberMethod()

印刷データは以下の通りです。

name == Kotlin  |  numPart == 0
我是局部类中的方法

部分クラスは、その部分クラスが定義されているメソッド内でのみ使用できます。インスタンス メソッドで定義されたローカル クラスは、外部クラスのすべての変数とメソッドにアクセスできますが、それらを変更することはできません。

ソースアドレス: https://github.com/FollowExcellence/KotlinDemo-master

注意してください、迷わないようにしてください


さて、皆さん、以上がこの記事の全内容ですが、ここに見える人たちは皆、才能のある人たちです。

あなたのサポートと評価に感謝します。あなたの「いいね!」が私の創作の最大の動機です。また次の記事でお会いしましょう。

このブログに間違いがあれば、批判やアドバイスをお願いします。ありがとうございました。

優秀な Android 開発者になりたいなら、ここでマスターしなければならない知識フレームワークをマスターし、夢に向かって一歩ずつ進んでください。動き続ける!

おすすめ

転載: blog.csdn.net/m0_37796683/article/details/108863997