Kotlin 类与对象

类的定义

在面向对象的思想中最核心的就是对象,为了在程序中创建对象,首先需要定义一个类。在定义类时需要使用“class”关键字声明。

类是对象的抽象,它用于描述一组对象的共同特征和行为。类中可以定义成员变量和成员函数,其中成员变量用于描述对象的特征,也被称作属性,成员函数用于描述对象的行为,可简称为函数或方法。接下来我们通过一个案例来学习如何定义一个Person类,具体代码如下所示。

package com.itheima.chapter04
class Person{
    // 成员属性
    private val name = ""
    private val age = 0
    // 成员方法
    private fun sayHello() {
        println(" 我叫${name},我今年${age} 岁。")
    }
}

在上述代码中,Person是类名,name与age是成员变量,sayHello()是成员函数,在sayHello()中可以直接访问成员变量name和age。

对象的创建

我们想要应用程序完成具体的功能,仅有类是远远不够的,还需要根据类创建实例对象。在Kotlin程序中对象是通过“类名()”的形式来直接创建的,具体格式如下:

var对象名称=类名();

例如,创建Person类的实例对象代码如下:

var p=Person();

在上述代码中,“Person()”用于创建Person类的实例对象,“var p”则是声明了Person类型的变量p。中间的等号用于将Person对象在内存中的地址赋值给变量p,这样变量p便持有了对象的引用。接下来的文章中为了便于描述变量p引用的对象,通常会将该对象简称为p对象。在内存中变量p和对象之间的引用关系如图所示。
Kotlin 类与对象

在创建Person对象后,可以通过对象的引用来访问对象所有的成员,具体格式如下:

对象引用.对象成员

接下来我们通过一个案例来学习如何访问对象的成员,具体代码如下所示。

package com.itheima.chapter04
class Person {
    // 成员属性
    var name = " 朵儿"
    var age = 18
    // 成员方法
    fun sayHello(): Unit {
        println(" 我叫$name, 我今年$age 岁。")
    }
}
fun main(args: Array<String>) {
   var person = Person()             //创建对象
   person.sayHello()                 //调用方法
   println(" 姓名:${person.name}")   //访问属性
   person.name = "羽儿"              //修改属性
   println(" 姓名:${person.name}")   //打印修改之后的结果
}

运行结果:

我叫朵儿,我今年18岁。
姓名:朵儿
姓名:羽儿

在上述代码中,第2~10行代码创建了一个Person类,在该类中分别定义了2个成员属性name和age,1个成员方法sayHello()。在main()函数中,第12行代码创建了Person类的一个实例对象person,接着通过person.sayHello()person.name的方式来访问Person类中的这些成员属性和成员方法。

类的封装

当一个类的成员变量可以被随意访问时,则这个成员变量的值可能被设置为不符合要求的数据,为了解决这个问题,在定义一个类时,应该对成员变量的访问做出一些限制,不允许外界随意访问,此时就需要用到类的封装。

类的封装是指在定义一个类时,将类中的属性私有化,即使用private关键字来修饰,私有属性只能在它所在的类中被访问。为了让外界访问这些私有属性,需要提供一些使用public修饰的公有方法。接下来我们通过一个案例来学习类的封装,具体代码如下所示。

package com.itheima.chapter04
class Student {
    var name: String = ""        //name 属性,默认是公有属性
    private var age: Int = 0     //age 属性,是私有属性
    // 默认setAge() 方法为公有方法
    fun setAge(age: Int) {
        if (age >= 0) {
            this.age = age
        } else {
           println(" 输入年龄有误!")
       }
   }
   // 默认sayHello()方法为公有方法
   fun sayHello() {
       println(" 我叫${name},我今年${age} 岁。")
   }
}
fun main(args: Array<String>) {
   var stu = Student()
   stu.name = " 小雷"   //访问公有属性name
   stu.setAge(-4)       //访问私有属性age
   stu.sayHello()       //访问公有方法sayHello()
}

运行结果:

输入年龄有误!
我叫小雷,我今年0岁。

在上述代码中,使用private关键字将age属性声明为私有,setAge()方法与sayHello()方法默认为公有,其中setAge()方法用于设置age属性的值,sayHello()方法用于输出学生信息。在main()方法中创建一个Student的实例对象stu,接着分别调用stu.name、stu.setAge()设置name、age属性值,会发现这里将age属性值设置为-4,明显不符合要求,由于在setAge()方法中会对age属性值进行判断,传入的值小于0,因此会打印“输入年龄有误”的信息,age属性没有被赋值,仍为默认初始值0。

酷客教程相关文章:

赞(0)

评论 抢沙发

评论前必须登录!