类和对象
在这周学习了Kotlin的类和对象的基本概念,主要是和java类比起来学习,相关的知识学习的也更快点。
现在对比下两段代码
java版的学生类
class student{
private String name;
private int age;
public String getName()
{
return name;
}
public int getAge()
{
return age;
}
public void setName(String n)
{
name = n;
}
public void setAge(int b)
{
age = b;
}
}
Kotlin的学生类
class Student(
var name:String,
var age:Int)
两者完全一样的,只不过java中要自己写get和set方法 kotlin自己直接可以调用,定义的方法是在参数名前加上 var 或者 val 关键字,val 是代表属性是常量。在创建类的时候,调用构造函数就直接把它们进行了初始化,这样就不用在类中单独声明类的属性了这样感觉方便了好多
类的声明格式
关键字还是class
class Test{
// 属性...
...
// 构造函数
...
// 函数
...
// 内部类
...
...
}
当类没有结构体的时候,大括号可以省略。即:
class Student
类的构造函数
1.主构造函数
主构造函数是类头的一部分,类名的后面跟上构造函数的关键字以及类型参数。
eg class Studentconstructor(age : Int,name:String){
}
//主构造函数constructor关键字可以省略
2.构造函数中的初始化代码块
关键字 init
构造函数中不能出现其他的代码,只能包含初始化代码。包含在初始化代码块中
class Student(var name:String,var age:Int){
init{
name = "笑笑"
age = 88
}
}
fun main(args: Array<String>) {
var s = Student("汪汪",44)
println(s.age)
println(s.name)
}
打印结果
笑笑
88
3
3辅助(二级)构造函数
Kotlin中支持二级构造函数。它们以constructor关键字作为前缀。类似于java的多个构造函数
下面有两种情况套路
3.1当有主构造函数和二级构造函数的时候
如果类具有主构造函数,则每个辅助构造函数需要通过另一个辅助构造函数直接或间接地委派给主构造函数。 使用this关键字对同一类的另一个构造函数进行委派:
简单的来说就是用主构造函数的值传给二级构造函数
class Student(var name:String,var age:Int){
constructor(name:String,ss:String,age:Int):this(name,age){
println(ss)
}
}
fun main(args: Array<String>) {
var s = Student("汪汪","啦啦啦",33)
println(s.name)
println(s.age)
}
输出
啦啦啦
汪汪
33
在上面的程序当传入两个参数时候就执行主构造函数
有三个参数的时候就先执行init的内容,然后执行二级构造函数
其实这里面就是靠this来传值,看下面一段代码
不需要的话就传空值 需要就那this来传递
3.2当类的主构造函数都存在默认值时的情况
有默认值的时候,如何在创建对象的时候没有给构造函数传参,,,就打印默认值
传入什么就按照构造器 然后获得对象
class Student(var name:String = "默认值",var age:Int=11){
init{
println("name = $name age = $age")
}
constructor(name:String,ss:String,age:Int):this(name,age){
println(ss)
}
}
fun main(args: Array<String>) {
var s1 = Student()
var s2 = Student("喵喵",22)
var s3 = Student("汪汪","啦啦啦",33)
}
打印结果是:
name = 默认值 age = 11
name = 喵喵 age = 22
name = 汪汪 age = 33
啦啦啦
对象的创建
这个和java差不多,,就是没有new这个单词
eg var s = Student(“小笑笑”,18)
类的分类
在kotlin中有五大类
密封类、内部类(嵌套类)、抽象类、枚举类、接口类、数据类
//这个在以后的博客再详细讲哈