Kotlin Kotlin] [オブジェクト指向(クラス|メンバ変数|メンバー・メソッド|パッケージ|相続|ポリモーフィズム)



I.は、単純なクラス(整数フィールド)を作成します。



定義されたカテゴリ:


①クラスの定義: キーワード定義クラスがあるクラス

②定義されたフィールド: クラスの後の括弧内に、使用するvarフィールド名:フィールドタイプは フィールドを定義することができます。


/**
 * 定义 Rect 类 : 定义类的关键字是 class
 *
 * 类字段 : 该类对象有两个属性 , 宽 ( width ) 和 高 ( height ) , 类型都是 int
 *
 */
class Rect (var width:Int , var height : Int)

/**
 * 函数入口
 */
fun main(args:Array<String>){
    //创建矩形
    var rect = Rect(10, 8);

    //使用字符串模板打印 Rect 对象字段
    println("Rect width : ${rect.width} , height : ${rect.height}")
}

結果:

Rect width : 10 , height : 8


II。シンプルを作成します(+整数フィールドの文字列フィールド)



定義されたカテゴリ:


①クラスの定義: キーワード定義クラスがあるクラス

②定義されたフィールド: クラスの後の括弧内に、使用するvarフィールド名:フィールドタイプは フィールドを定義することができます。


/**
 * 定义学生类
 *
 * 定义字段 : 其含有一个字符串字段 ,
 */
class Student ( var name:String , var age:Int )

fun main(args:Array<String>) {

    //创建 Student 对象
    var student = Student("Tom", 18)

    //使用字符串模板打印 Student 对象字段
    println("student name : ${student.name} , age : ${student.age}")

}

結果:

student name : Tom , age : 18


III。クラスで定義されたメソッド



クラスメソッド定義: 使用キーワード楽しい、クラスメソッドで定義され、オブジェクトのメンバ変数にアクセスすることができますこの方法。

/**
 * 定义学生类
 *
 * 定义字段 : 其含有一个字符串字段 ,
 */
class Student ( var name:String , var age:Int ){

    fun talk(){
        println("Student ${name} is talking")
    }

}

fun main(args:Array<String>) {

    //创建 Student 对象
    var student = Student("Tom", 18)

    //使用字符串模板打印 Student 对象字段
    println("student name : ${student.name} , age : ${student.age}")

    //调用类中的方法
    student.talk()

}

結果:

student name : Tom , age : 18
Student Tom is talking


IV。パッケージ



パッケージの効果: 非表示オブジェクト、一般に公開のみパブリックインターフェイス内部に実装プロパティおよびメソッドの詳細。


以下のような:学生、パッケージ名と年齢のフィールド、メソッドとの話。



V.継承



1つの親:. 開きキーワード:


①オープン継承: 唯一のクラスの前に開いているキーワードを使用し、クラスがクラスを継承するクラスを持っている唯一のオープンです。

②メソッドのオーバーライドが許可: 許可書き換え方法、唯一のオープン関数は、サブクラスによってオーバーライドすることができます。


/**
 * 定义父类
 *
 * open 关键字作用 : 打开继承 , 只有打开了该类 , 才能有类继承该类
 *                 允许方法重写 , 只有 open 的函数 , 才能被子类重写
 */
open class Father {

    var familyName:String = "Trump"

    fun name(){
        println("My family name is ${familyName}")
    }

    //允许方法被重写
    open fun say(){
        println("I'm father. family : ${familyName}")
    }

}

2つのサブクラス:クラス継承とオーバーライドメソッド。

/**
 * 子类代码
 *
 * 继承 : 使用 冒号 ":" , 表示继承
 */
class Son : Father() {

    //重写父类方法
    override fun say(){
        println("I'm son. family : ${familyName}")
    }
}

3.テスト継承:

/**
 * 测试继承
 */
fun main() {

    //创建子类对象
    var son = Son();

    //调用子类对象继承的父类的方法
    son.name();

    //调用子类对象重写的父类方法
    son.say();
}

4.結果:

My family name is Trump
I'm son. family : Trump


VI。ポリモーフィズムと抽象クラス



図1は、抽象クラスを定義: 抽象クラスは、(Javaのとは異なり)抽象メソッドを定義するだけで、

/**
 * 抽象类 : 只有抽象类中才能定义抽象方法 ( 与 Java 不同 )
 */
abstract class Human ( var name:String , var age:Int ) {

    /**
     * 定义抽象方法 , 类必须是抽象类
     */
    abstract fun say();

}

タイプ1のための2:

/**
 * 定义 Man 类 , 继承抽象类 Human
 */
class Man(name : String, age : Int) : Human(name, age) {

    /**
     * 实现的 Human 抽象类 的 say 抽象方法
     */
    override fun say() {
       println("Man : name : ${name} , age : ${age}")
    }
}

3実装クラス2:

/**
 * 定义 Women 类 , 继承抽象类 Human
 */
class Woman(name : String, age : Int) : Human(name, age) {

    /**
     * 实现的 Human 抽象类 的 say 抽象方法
     */
    override fun say() {
        println("Women : name : ${name} , age : ${age}")
    }
}

4.多型を導入: 男性と女性のメソッド呼び出しは、異なる操作が多型が反映されている実行言います。

/**
 * 测试抽象类与多态
 */
fun main() {

    // Man 和 Women 调用 say 方法 , 执行的不同的操作
    //  这就是多态

    var tom = Man("Tom", 18);

    //Man : name : Tom , age : 18
    tom.say();

    var jerry = Woman("Jerry", 19);

    //Women : name : Jerry , age : 19
    jerry.say();

}
公開された307元の記事 ウォンの賞賛1043 ビュー170万+

おすすめ

転載: blog.csdn.net/han1202012/article/details/104527342