1.繼承
需要被繼承的類,類的方法,類的屬性都要加open關(guān)鍵字
// 父類沒(méi)有構(gòu)造需要的參數(shù)
open class Person(){
var name:String = ""
var age:Int = 0
}
class Student():Person(){
var school:String = ""
}
// 父類有需要構(gòu)造的參數(shù)
open class Person(var name:String, var age:Int){
open fun showInfo(){
print("hello")
}
}
class Student(var name:String, var age:Int, var school:String):Person(name, age){
override fun showInfo(){
print("hello student")
}
}
2.抽象類 重寫(xiě) 重載
抽象類不能被實(shí)例化,需要子類去繼承然后實(shí)現(xiàn)抽象方法,所以也不需要加open關(guān)鍵字
abstract class News{
var origin = "reporter"
abstract var content:String
abstract fun newsLength(): Int
}
class schoolNews:News(){
override var content:String =""
override fun newsLength():Int = content.length
}
重載:不同參數(shù)個(gè)數(shù)的重載
重寫(xiě):子類繼承父類,重寫(xiě)父類的方法
3.接口interface
接口也不需要加open關(guān)鍵字
interface USB{
fun add()
fun remove()
}
class Computer:USB{
override fun add(){
print("add")
}
override fun remove(){
print("remove")
}
}
補(bǔ)充
屬性代理
// 屬性代理就是將屬性的get set都轉(zhuǎn)移到定義的by后面的類里面
// 如果屬性val需要實(shí)現(xiàn)一個(gè)操作符getValue()方法,如果屬性是var的話,就要實(shí)現(xiàn)getValue()和setValue()方法
class delegates{
val name by lazy{
"minger"
}
}
// lazy 和 lateinit都是延遲初始化
// lazy只能用在val上,lateinit只能用在var上
// lateinit不能用在可空類型和java基本類型上