Kotlin语言之面向对象编程
Posted CodeJiao
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Kotlin语言之面向对象编程相关的知识,希望对你有一定的参考价值。
1. Kotlin语言之面向对象编程
这里定义了一个Person类 , 它哟有 姓名,年龄的成员变量和 eat的成员方法
class Person
var name = ""
var age = 0
fun eat()
println("$name is eating. He is $age years old.")
接下来我们来对类进行实例化:
Kotlin语言实例化的方式与Java类型, 但去掉了new关键字.
之所以这么设计, 是因为当你调用了某个类的构造函数,
你的意图就是将类进行实例化, 所以即使没有new关键字,
也能够清晰的表达你的意图.
val p = Person()
接下来在main函数中对对象p进行一些操作
fun main()
val p = Person()
p.name = "Tom"
p.age = 18
// 调用p的 eat方法
p.eat()
运行结果:
2. 继承与构造函数
Kotlin中一个类默认是不可以被继承的,如果想要让一个类可以被继承,需要主动声明open关键字:
open class Person
…
要让另一个类去继承Person类,则需要使用冒号关键字:
class Student : Person()
var sno = ""
var grade = 0
现在Student类中就自动拥有了Person类中的字段和函数,还可以定义自己独有的字段和函数。
Kotlin将构造函数分为了2种: 主构造函数和次构造函数
2.1 主构造函数
主构造函数是最常用的构造函数, 每个类都会默认的有一个不带参数的主构造函数,
可以显示的它指明参数. 主构造函数没有函数体, 直接定义在类名后面即可. 如:
class Student(val sno: String, val grade: Int) : Person()
代码验证:
fun main()
// 将学生类实例化 并且调用它的study方法
val student = Student("11923020121", 3)
student.study()
//open 表明类是可以被继承的
open class Person
var name = ""
var age = 0
fun eat()
println("$name is eating. He is $age years old.")
//显示的指明学生类的参数
class Student(val sno: String, val grade: Int) : Person()
fun study()
println("grade is $grade and sno is $sno")
运行结果:
如果你想在主构造函数中编写逻辑, 可以使用init结构体,
所有主函数的逻辑都可以写在里面:
测试代码:
fun main()
// 将学生类实例化 并且调用它的study方法
val student = Student("11923020121", 3)
// student.study()
//open 表明类是可以被继承的
open class Person
var name = ""
var age = 0
fun eat()
println("$name is eating. He is $age years old.")
//显示的指明学生类的参数
class Student(val sno: String, val grade: Int) : Person()
// init 这里给主构造方法添加了2个打印语句
init
println("sno is $grade")
println("grade is $grade")
fun study()
println("grade is $grade and sno is $sno")
运行结果:
子类的构造函数调用父类中的哪一个构造函数,在继承的时候通过括号来指定:
class Student(val sno: String, val grade: Int) : Person()
在这里, Person类后面的一对空括号表示Student类的主构造函数在初始化
的时候会调用Person类的无参构造函数, 即使在无参的情况下, \\
这对括号也不能省略.
如果我们将Person类改造一下,将姓名和年龄都放在主构造函数中
open class Person(val name:String,val age :Int)
那么Student类在继承Person类的时候,
就必须给Person类的构造函数传入name和age字段
class Student(val sno:String, val grade:Int, name: String, age: Int) :Person(name, age)
init
println("sno is $sno")
println("grade is $grade")
println("name is $name")
println("age is $age")
接下来是完整的代码演示
fun main()
val stu= Student("119230",3,"Tom",18)
open class Person(val name:String,val age :Int)
class Student(val sno:String, val grade:Int, name: String, age: Int) :Person(name, age)
init
println("sno is $sno")
println("grade is $grade")
println("name is $name")
println("age is $age")
运行结果:
2.2 次构造函数
任何一个类都只能有一个主构造函数, 但可以有多个次构造函数,
次构造函数也是用来实例化一个类的, 但它是有自己的函数体的
所有次构造函数都必须调用主构造函数(包括间接调用) .
代码演示:
class Student(val sno: String, val grade: Int, name: String, age: Int) : Person(name, age)
// 第一个次构造函数
constructor(name: String, age: Int) : this("", 0, name, age)
//第二个次构造函数
constructor() : this("", 0)
init
println("sno is $sno")
println("grade is $grade")
println("name is $name")
println("age is $age")
第一个次构造函数:
接受name和age参数, 并且通过this调用了 主构造函数
第二个次构造函数:
空参构造函数
下面用创建一些类的实例
fun main()
val stu1 = Student()
val stu2 = Student("Peter", 19)
val stu3 = Student("119230", 3, "Tom", 18)
以上是关于Kotlin语言之面向对象编程的主要内容,如果未能解决你的问题,请参考以下文章
Kotlin中数据类和单例类的实现和讲解面向对象编程接口的实现