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

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指伴随对象,静态方法里不能访问属性和对象方法,

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值