美文网首页程诺陪你学Android
kotlin嵌套,扩展,继承-构造函数,重写

kotlin嵌套,扩展,继承-构造函数,重写

作者: 印奕 | 来源:发表于2022-05-16 23:20 被阅读0次

    1,Java不能函数内部定义函数;

    为什么要有嵌套函数?

    让一些代码块独立,不让外部和内部的其他方法访问,但要注意:(1)如果嵌套函数内部想访问其他嵌套函数,必须是在其他嵌套函数定义之后;(2)嵌套函数可以访问外部的属性。

    2,kotlin与Java一大区别:扩展函数与属性。

    思考:如何在已有类基础上添加属性和方法?

    继承,扩展,

    (一)扩展方法

    kotlin&Java默认没有open的就是final的,即不能被继承,也就无法通过继承添加属性和方法eg:String类,并且系统默认的final或open属性是不能更改的,但是kotlin可以扩展属性和方法。

    kotlin扩展函数模版格式:fun 扩展的类名.扩展函数函数名(参数):返回类型{};

    补充:变量.函数名().sout可以直接输出函数的返回值;

    注意:

    -1,扩展函数并没有在扩展类中添加对应的方法!

    -2,扩展函数通常定义在外部(顶层函数),即不定义在一个类的内部,一处定义,多处可调用;kotlin中可以给所有类添加方法,eg:给Any类添加show方法:fun Any.show(){println(this)}(Java不行,因为Java只能单继承);

    -3,只有这个类或者子类可以访问这个类的扩展函数;

    -4,如果扩展函数和原有类的成员函数重名,原有函数的优先级更高;

    -5,若要扩展类/静态方法,则格式eg:fun father.Companion.test(){}

    (二)扩展属性

    格式eg:var Person .name:String(注意不能直接用“=”初始化),初始化用getter方法。

    注意:扩展属性不是真的添加属性,不提供默认的变量field,因此无法存值,要给值的话用return,实现的本质:在里面创建对应的set和get方法,即扩展set,get方法(前提是var)。

    思考:那无法存值的话扩展属性有啥用?

    给机会干事,通过扩展的一个属性做些事情,通过get,set方法触发某一任务。

    注意:若扩展属性与原类中的一个属性重名,则原属性优先级更高。

    3,继承

    思维:写程序不能太多继承,否则耦合性太紧密,不够灵活。

    (1)Java&kotlin只能单继承,如果一定要多继承,则用接口;

    (2)kotlin类默认属性和方法都是final,不能被继承,如果需要继承重写则使用关键字open

      (3)

    -1,如果父类只有默认构造函数 

    a.class Child:Father1();

    b.class Child:Father1{ constructor(age;Int){} }

     -2,父类有构造函数(主,次)

    a.//⽗类

    open class Father1(val name:String)

    //⼦类

    class Child(name:String): Father1(name)

    b.//⽗类

    open class Father1(val name:String)

    //⼦类

    class Child: Father1{

    constructor(name: String):super(name){}

    }

    4,重写

    子类重写父类,父类方法前要加open,再在子类重写方法时会自动加上override,若重写函数中仍需调用父类的super,eg:super.startEngine(),super指父类的对象

    补充this:访问自己的属性或者方法,指调用这个方法的对象

    上图第一个this指类对象,第二个this指伴随对象,静态方法里不能访问属性和对象方法,

    相关文章

      网友评论

        本文标题:kotlin嵌套,扩展,继承-构造函数,重写

        本文链接:https://www.haomeiwen.com/subject/owvwurtx.html