面向对象:
/**
* 类与对象
*/
//创建一个类
open class Person {
var name = ""
var age = 0
fun eat() {
//第一种用变量的方法
print(name + "is eating." + "He is" + age + "years old")
//第二种$变量名
print("$name is eating.He is $age years old")
}
}
//类名后可以直接传参数
class PersonOne(name: String, age: Int) {
var name = name;
var age = age;
fun eat() {
print("$name is eating,he is $age")
}
}
//可以在类名后创建属性(这里其实是一个主构造函数,下面会讲到)
open class PersonTow(var name: String, var age: Int) {
fun eat() {
print("$name is eating,he is $age")
}
}
//实例化类,不需要new关键字
fun test() {
val Person = Person()
Person.name = "老刘"
Person.age = 5
val PersonOne = PersonOne("张三", 18)
PersonOne.name = "老刘"
PersonOne.age = 5
var personZhansan = PersonTow("张三", 18)
personZhansan.name = "老刘"
personZhansan.age = 5;
}
/**
* 继承和构造
* kotlin新建的类默认是不允许继承的,如果想要可以让其他类继承必须在class前面加open关键字
*/
//在person这个类前面加open关键字,然后用:继承
class Student : Person() {
}
//类名()括号里是主构造函数,默认是无参构造
class StudentOne(val sex: String, val num: Int) : Person() {
//主构造函数的逻辑可以写在init
init {
print("")
}
}
//如果继承的父类不是无参构造,子类也要加上参数
class StudentTow(name: String, age: Int, var sex: String) : PersonTow(name, age) {
}
//次构造函数constructor
class StudentThree(name: String, age: Int, var sex: String) : PersonTow(name, age) {
//this指的是主构造函数,这里次构造函数接受了一个参数sin,然后传给主构造函数
constructor(sin: String) : this(sin, 18, "男")
//第二个次构造函数,这个this指第一个次构造函数,不传参数,等于间接调用主构造函数
constructor() : this("")
}
//类没有主构造函数,只有次构造函数,
class StudentFore : PersonTow {
var ff = ""
var gg = 0
//由于没有主构造函数,只能直接调用父类的构造函数super
constructor(name: String, age: Int) : super(name, age) {
ff = name
gg = age
}
}
/**
* 接口
* 使用步骤与Java一样,单继承和可以实现多个接口
* 实现和继承一样使用:
*/
interface Study {
fun readBook()
//kotlin与java一样有函数默认实现功能,接口中的一个函数拥有了函数体,如果一个类去实现这个接口会强制实现doWork()
fun doWork(){
print("")
}
}
//实现接口,override重写父类函数
class StudentFive : Study {
override fun readBook() {
}
//如果这个方法是默认实现功能,可以删除
override fun doWork() {
}
}
//继承和实现接口
class StudentSix(name: String, age: Int) : PersonTow(name, age),Study{
override fun readBook() {
}
override fun doWork() {
}
}