类的定义
在面向对象的思想中最核心的就是对象,为了在程序中创建对象,首先需要定义一个类。在定义类时需要使用“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和对象之间的引用关系如图所示。
在创建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。
酷客教程相关文章:
评论前必须登录!
注册