1、open關(guān)鍵字
定義連個(gè)類(lèi)Father、Son
Son繼承Father

image.png
看下java代碼

image.png
Father類(lèi)是final的,所以不能繼承,需要加上open關(guān)鍵字修飾,成員變量和成員方法都一樣
fun main(args: Array<String>) {
var son=Son()
son.horbe()
}
open class Father{
open var name="張三"
open var age=20
open fun horbe()
{
println("父親習(xí)慣抽煙")
}
}
class Son:Father(){
override var name="張小三"
override var age=10
override fun horbe() {
println("孩子喜歡看書(shū)")
}
}
輸出:

image.png
2、抽象類(lèi)
抽象類(lèi)用abstract表示,抽象類(lèi)可以沒(méi)有抽象方法和抽象字段,抽象類(lèi)不需要使用open關(guān)鍵字
fun main(args: Array<String>) {
var son=Son()
println(son.name)
println(son.age)
son.horbe()
}
abstract class Father{
abstract var name:String
var age=20
abstract fun horbe()
}
class Son:Father(){
override var name="張小三"
override fun horbe() {
println("孩子喜歡看書(shū)")
}
}
輸出:

image.png
3、接口
fun main(args: Array<String>) {
var son=Son()
println(son.name)
println(son.age)
son.horbe()
son.ride()
son.drive()
}
abstract class Father{
abstract var name:String
var age=20
abstract fun horbe()
}
class Son:Father(),RideBike,DriveCar{
override fun ride() {
println("騎自行車(chē)")
}
override fun drive() {
println("開(kāi)車(chē)")
}
override var name="張小三"
override fun horbe() {
println("孩子喜歡看書(shū)")
}
}
interface RideBike{
fun ride()
}
interface DriveCar{
fun drive()
}
輸出:

image.png
4、接口細(xì)節(jié)
kotlin接口中的字段不能實(shí)現(xiàn),只能定義,但在java中是可以的

image.png
kotlin接口中的方法是可以實(shí)現(xiàn)的,但是java中是不可以的
interface DriveCar{
fun drive(){
println("開(kāi)車(chē)")
}
var str:String
}
5、is關(guān)鍵字
類(lèi)似于java中instanceof關(guān)鍵字
fun main(args: Array<String>) {
val shepHerdDog:Dog = ShepHerdDog()
//判斷完之后已將將shepHerdDog類(lèi)型由Dog類(lèi)型轉(zhuǎn)換為ShepHerdDog類(lèi)型
if(shepHerdDog is ShepHerdDog){
shepHerdDog.herdShep()
}
}
//Dog狗
abstract class Dog
//牧羊犬
class ShepHerdDog:Dog(){
//功能
fun herdShep(){
println("牧羊犬放羊")
}
}
//中華田園犬
class RuralDog:Dog(){
//功能
fun watchDoor(){
println("中華田園犬看家")
}
}
輸出:

image.png