class KotlinClass {
}
open class Person(var name: String, var age: Int, var address: String) {
//空构造
constructor() : this("", 0, "")
fun desc() {
println("我的名字叫$name,我的年龄是$age,我的住址是$address")
}
}
class Student(val grade: Int, val sno: Int, name: String, age: Int, address: String) :
Person(name, age, address), Study {
init {
println("kotlin 构造主没有函数体,那就把初始化逻辑写在这里...")
println("我的名字叫$name,我的年龄是$age,我的住址是$address 我读$grade 年纪,我的学号是$sno")
}
constructor(name: String, age: Int, address: String) : this(0, 0, name, age, address)
constructor() : this("", 0, "")
//
// override fun doHomework() {
// TODO("Not yet implemented")
// }
override fun readBooks() {
println("$name 在读书")
}
}
//接口使用
interface Study {
fun readBooks()
fun doHomework() {
println("doHomework...")
}
}
//数据类使用
data class User(var id: Int, var name: String, var no: Int) {
}
//单例类
object Singleton{
fun test(){
println("单例类的test...")
}
}
fun main() {
println("hello kotlin...")
println("------------------------【类的基本使用001】-------------------")
var person = Person()
person.name = "李四"
person.age = 30
person.address = "北京市"
person.desc()
println("-------------------------【类的继承002】--------------------------")
println("1.在kotlin中任何一个非抽象的类默认都是不可以被继承的,相当于java中给类声明了final关键字")
println("2.之所以这么设计kotlin希望类最后是不可变的,而一个类允许被继承的话,它无法预知子类的变化,造成未知的风险,所以默认为final")
println("3.如果需要继承请使用open 关键字")
var student = Student();
student.name = "黄飞鸿"
student.address = "广东佛山"
student.age = 18
student.desc()
println("-------------------------【类的构造函数003】--------------------------")
println("1.在student继承person时的写法 Student : Person() person后面的括号,括号表示主构造函数,继承一个类使用的是冒号:")
println("2.每个类默认都有一个不带参数的主构造函数,主构造的特点是没有方法体直接定义在类名后面即可")
student = Student(5, 10, "方世玉", 10, "广东深圳")
// student.desc()
println("-------------------------【接口的定义004】--------------------------")
println("1.接口的功能和java类似")
println("2.kotlin中允许定义非抽象的方法,方法可以直接实现")
student = Student("石志康", 46, "上海")
student.readBooks()
println("-------------------------【数据实体类的定义005】--------------------------")
println("1.使用data关键字")
var user = User(1,"zhangsan",100)
println("我的名字是${user.name} 我的编号是${user.no}")
println("-------------------------【单例类的定义006】--------------------------")
println(Singleton.test())
}
输出结果