1,Kotlin代码案例:决属性与方法冲突的类和对象操作演示

 

// 使用Kotlin 1.3.11编译器

// 不需要包声明(package语句)

 

// 定义类A1

class A1 {

    // 定义静态变量BBB,类似C语言中的全局静态变量

    companion object {

        var BBB: Int = 0 // 初始化静态变量BBB为0

    }

 

    // 定义实例变量AAA,包含整数和字符串类型,类似C语言中的结构体成员变量

    var AAA_int: Int = 0 // 整数类型的实例变量,初始化值为0

    var AAA_str: String = "" // 字符串类型的实例变量,初始化为空字符串

 

    // 第一个构造函数,用于初始化字符串和整数类型的实例变量

    constructor(TTT1: String, TTT2: Int) {

        this.AAA_str = TTT1 // 将传入的字符串参数TTT1赋值给字符串实例变量AAA_str

        this.AAA_int = TTT2 // 将传入的整数参数TTT2赋值给整数实例变量AAA_int

    }

 

    // 第二个构造函数,用于初始化静态变量BBB

    constructor(TTT3: Int) {

        A1.BBB = TTT3 // 使用类名A1访问并赋值静态变量BBB

    }

 

    // 实例方法CCC1,类似C语言中的结构体成员函数

    fun CCC1() {

        if (this.AAA_int > 0) { // 检查整数实例变量AAA_int的值是否大于0

            println("dog 1: AAA_int is positive.") // 使用printf风格的打印(Kotlin字符串模板模拟)

        } else {

            println("dog 2: AAA_int is not positive.") // 使用printf风格的打印(Kotlin字符串模板模拟)

        }

    }

 

    // 实例方法DDD2,类似C语言中的结构体成员函数

    fun DDD2() {

        println("cat1: Car started.") // 输出汽车启动的信息

    }

 

    // 实例方法CCCC1,类似C语言中的结构体成员函数

    fun CCCC1() {

        var FFF1: Int = 0 // 定义局部整数变量FFF1并初始化为0,类似C语言中函数内的局部变量定义

        println("cat2: CCCC1 method called. FFF1 = $FFF1") // 使用printf风格的打印(Kotlin字符串模板模拟)

    }

 

    // 静态方法DDD,类似C语言中的全局函数操作静态变量

    fun DDD() {

        println("cat3: Static variable BBB value: $BBB") // 输出静态变量BBB的值

    }

}

 

// 定义类A2

class A2 {

    // 实例方法CCC1,类似C语言中的结构体成员函数

    fun CCC1() {

        println("cat4: A2's CCC1 method called.") // 输出类A2的CCC1方法被调用的信息

    }

}

 

// 定义类A3,采用移除手动定义的get和set方法的方式解决冲突

class A3 {

    // 定义实例变量AAA,类似C语言中的结构体成员变量

    var AAA: Int = 0 // 初始化实例变量AAA为0

}

 

// 定义类A4,采用将属性设为私有并手动定义get和set方法的方式解决冲突

class A4 {

    // 定义私有实例变量AAA,类似C语言中隐藏的结构体成员变量

    private var AAA: Int = 0 // 初始化实例变量AAA为0

 

    // Getter方法,用于获取实例变量AAA的值,类似C语言中通过函数获取结构体成员变量值

    fun getAAA(): Int {

        return this.AAA // 返回实例变量AAA的值

    }

 

    // Setter方法,用于设置实例变量AAA的值,类似C语言中通过函数设置结构体成员变量值

    fun setAAA(TTT4: Int) {

        this.AAA = TTT4 // 将传入的参数TTT4赋值给实例变量AAA

    }

}

 

// 主函数,程序的入口点,类似C语言中的main函数

fun main() {

    // 定义字符串变量HHH,类似C语言中的字符串常量

    val HHH: String = "Example" 

    // 定义整数变量FFF,类似C语言中的整型常量

    val FFF: Int = 2024 

 

    // 创建A1类的对象GGG1,并调用第一个构造函数传入参数,类似C语言中创建结构体实例并初始化

    val GGG1: A1 = A1(HHH, FFF) 

    // 创建A2类的对象GGG2

    val GGG2: A2 = A2() 

    // 创建A3类的对象GGG3

    val GGG3: A3 = A3() 

    // 创建A4类的对象GGG4

    val GGG4: A4 = A4() 

 

    GGG3.AAA = 10 // 直接使用属性赋值(A3类)

    GGG4.setAAA(10) // 使用setter方法赋值(A4类)

 

    GGG1.CCC1() // 调用A1类对象GGG1的实例方法CCC1

    GGG1.DDD2() // 调用A1类对象GGG1的实例方法DDD2

    GGG1.DDD() // 调用A1类的静态方法DDD

    GGG1.CCCC1() // 调用A1类对象GGG1的实例方法CCCC1

    GGG2.CCC1() // 调用A2类对象GGG2的实例方法CCC1

 

    // 使用printf风格的打印,输出A3类对象GGG3的实例变量值,模拟C语言的格式化输出

    println("cat5: A3's AAA value: ${GGG3.AAA}") 

    //使用printf风格的打印,输出A4类对象GGG4的实例变量值,模拟C语言的格式化输出

    println("cat6: A4's AAA value: ${GGG4.getAAA()}") 

}

 

 

代码结构标注

 

1. 类A1的定义:

1.1 静态变量BBB的定义

1.2 实例变量AAA_int和AAA_str的定义

1.3 第一个构造函数的定义

1.4 第二个构造函数的定义

1.5 实例方法CCC1的定义

1.6 实例方法DDD2的定义

1.7 实例方法CCCC1的定义

1.8 静态方法DDD的定义

2. 类A2的定义:

2.1 实例方法CCC1的定义

3. 类A3的定义:

3.1 实例变量AAA的定义(解决冲突方式一:移除手动get和set方法)

4. 类A4的定义:

4.1 私有实例变量AAA的定义

4.2 Getter方法getAAA的定义

4.3 Setter方法setAAA的定义(解决冲突方式二:私有属性并手动定义访问方法)

5. 主函数main的定义:

5.1 字符串变量HHH的定义

5.2 整数变量FFF的定义

5.3 A1类对象GGG1的创建及构造函数调用

5.4 A2类对象GGG2的创建

5.5 A3类对象GGG3的创建

5.6 A4类对象GGG4的创建

5.7 对A3类对象GGG3的属性赋值

5.8 对A4类对象GGG4的属性赋值(通过setter方法)

5.9 调用A1类对象GGG1的实例方法CCC1

5.10 调用A1类对象GGG1的实例方法DDD2

5.11 调用A1类的静态方法DDD

5.12 调用A1类对象GGG1的实例方法CCCC1

5.13 调用A2类对象GGG2的实例方法CCC1

5.14 输出A3类对象GGG3的实例变量值

5.15 输出A4类对象GGG4的实例变量值

 

打印结果

 

dog 1: AAA_int is positive.

cat1: Car started.

cat3: Static variable BBB value: 0

cat2: CCCC1 method called. FFF1 = 0

cat4: A2's CCC1 method called.

cat5: A3's AAA value: 10

cat6: A4's AAA value: 10

 

 

涉及到的知识点

 

1. 类和对象:定义多个类(A1到A4),创建类的对象(GGG1到GGG4),并通过对象调用类的方法和访问实例变量。

2. 变量声明和类型:声明静态变量(BBB)、实例变量(AAA_int、AAA_str、AAA)、局部变量(FFF1)和主函数中的变量(HHH、FFF),明确指定变量类型,模拟C语言风格的变量声明。

3. 构造函数:定义构造函数来初始化类的实例变量和静态变量,通过传入参数来设置对象的初始状态。

4. Getter和Setter方法:一种方式是使用Kotlin自动生成的属性访问器(A3类),另一种是手动定义Getter和Setter方法来访问私有属性(A4类),体现了面向对象编程中的封装特性。

5. 实例方法和静态方法:区分实例方法(如CCC1、DDD2、CCCC1)和静态方法(DDD),了解它们的定义方式和调用方式的不同,静态方法通过类名或对象调用,实例方法通过对象调用。

6. 条件判断语句:使用if语句进行条件判断,根据不同的条件执行不同的代码块,实现逻辑控制。

7. 格式化输出:在Kotlin中使用字符串模板模拟C语言的printf函数进行格式化输出,按照指定的格式输出变量的值和相关信息。

8. Kotlin与C语言风格的结合:尽量遵循C语言的一些习惯,如显式声明变量类型,在函数内定义局部变量的方式,使代码结构和风格更接近C语言,同时利用Kotlin语言的特性来实现相应的功能。

 

标题

 

“Kotlin代码案例:模拟C语言风格并解决属性与方法冲突的类和对象操作演示”

 

你可能感兴趣的:(kotlin)