android中私有方法 继承,Android-Kotlin的继承以及GET/SET 方法的使用

b8d7af642d00

image

继承

1.先看一个案例,子类使用到父类的资源 【案例一】

父类 张翠山:

package cn.kotlin.kotlin_oop03

/**

* 描述父对象:张翠山

*

* personDescribe 此人的简介 / var personDescribe:String 此String是Kotlin的

*

* 描述行为:gestAction 武功

*/

// 注意:⚠️ 必须此类默认是不被其他类继承的,如果想被其他类继承 需要加入 open 修饰

open class MyFatherClass {

// 注意:⚠️ 必须此成员变量默认是不被其他类使用的,如果想被其他类使用 需要加入 open 修饰

open var personDescribe:String = "义薄云天,大仁大义 ...."

/**

* 显示个人简介

*/

// 注意:⚠️ 必须此方法默认是不被其他类使用的,如果想被其他类使用 需要加入 open 修饰

open fun showPersonDescribe() {

println("张翠山-Father简介${personDescribe}")

}

/**

* 张翠山的武功

*/

// 注意:⚠️ 必须此方法默认是不被其他类使用的,如果想被其他类使用 需要加入 open 修饰

open fun gestAction() {

System.out.println("自创剑法,剑法厉害......")

}

}

子类 张无忌:

package cn.kotlin.kotlin_oop03

class MyChildClass : MyFatherClass() {

}

测试 的 main方法:

package cn.kotlin.kotlin_oop03

fun main(args: Array) {

// 先打印父类的信息 张翠山

var myFatherClass = MyFatherClass()

myFatherClass.showPersonDescribe()

myFatherClass.gestAction()

println("-----------------------")

// 打印子类的信息 张无忌

var myChildClass = MyChildClass()

myChildClass.showPersonDescribe() // 调用此方法 由于子类没有此方法,会去往父类找 找到后调用

myChildClass.gestAction() // 调用此方法 由于子类没有此方法,会去往父类找 找到后调用

}

执行结果:

b8d7af642d00

image

2.对以上案例一进行修改 【案例二】

父类 张翠山:

package cn.kotlin.kotlin_oop03

/**

* 描述父对象:张翠山

*

* personDescribe 此人的简介 / var personDescribe:String 此String是Kotlin的

*

* 描述行为:gestAction 武功

*/

// 注意:⚠️ 必须此类默认是不被其他类继承的,如果想被其他类继承 需要加入 open 修饰

open class MyFatherClass {

// 注意:⚠️ 必须此成员变量默认是不被其他类使用的,如果想被其他类使用 需要加入 open 修饰

open var personDescribe:String = "义薄云天,大仁大义 ...."

/**

* 显示个人简介

*/

// 注意:⚠️ 必须此方法默认是不被其他类使用的,如果想被其他类使用 需要加入 open 修饰

open fun showPersonDescribe() {

println("张翠山-Father简介${personDescribe}")

}

/**

* 张翠山的武功

*/

// 注意:⚠️ 必须此方法默认是不被其他类使用的,如果想被其他类使用 需要加入 open 修饰

open fun gestAction() {

System.out.println("自创剑法,剑法厉害......")

}

}

子类 张无忌:

package cn.kotlin.kotlin_oop03

class MyChildClass : MyFatherClass() {

/**

* 显示个人简介

*/

// 重写父类的方法,需要写override

override fun showPersonDescribe() {

println("张无忌-Child简介${personDescribe}")

}

/**

* 张无忌还在的武功

*/

// 注意:override代表 重写父类的方法

override fun gestAction() {

println("九阳神功,乾坤大挪移,龙爪手")

}

}

测试的main方法:

package cn.kotlin.kotlin_oop03

fun main(args: Array) {

// 先打印父类的信息 张翠山

var myFatherClass = MyFatherClass()

myFatherClass.showPersonDescribe()

myFatherClass.gestAction()

println("-----------------------")

// 打印子类的信息 张无忌

var myChildClass = MyChildClass()

myChildClass.showPersonDescribe()

myChildClass.gestAction()

}

执行的结果:

b8d7af642d00

image

3.案例三,父类 子类 简单继承:

package cn.kotlin.kotlin_oop03

/**

* 描述父类

*/

// open 理解为对外暴露,其他地方可以继承

open class Father {

// 定义描述性格的变量 注意:var kidney:String 此变量的String是Kotlin的

var kidney:String = "性格文静,热爱运动,喜欢学习"

/**

* 描述武功的行为/方法

*/

// open 理解为对外暴露,其他地方可以调用

open fun showGest() {

println("武功平常,只能打打小混混")

}

}

/**

* 描述子类

*/

class Child : Father() {

/**

* 描述武功的行为/方法

*/

// override代表重写父类的方法

override fun showGest() {

println("拥有上乘武功,神照经,难遇敌手....")

}

}

/**

* main测试方法

*/

fun main(args: Array) {

// 打印父类的信息

var f = Father();

println("父类的性格:${f.kidney}")

f.showGest() // 父类的武功

println("-------------------------------------------")

// 打印子类的信息

var c = Child();

println("子类的性格:${c.kidney}")

c.showGest() // 子类的武功

println("-------------------------------------------")

// 父类的引用指向子类的对象 以前Java的写法 父类 fc = new 子类();

var fc:Father = Child()

fc.showGest()

}

运行结果:

b8d7af642d00

image

Get/Set方法的使用

接着往下讲解kotlin的get/set方法的使用。

Student.kt

package cn.kotlin.kotlin_oop04

open class Person {

open var personName:String = "我是父类的名字"

}

class Student: Person() {

/**

* name用private私有修饰,外界其他地方不准访问,隐藏细节

* name提供set get 方法 对外暴露功能

* 对细节隐藏,只暴露自定义暴露的东东,就是属于封装的体现

*/

private var name:String = ""

fun getName() : String{

return name

}

fun setName(name:String) {

this.name = name

}

/**

* age用private私有修饰,外界其他地方不准访问,隐藏细节

* age提供set get 方法 对外暴露功能

* 对细节隐藏,只暴露自定义暴露的东东,就是属于封装的体现

*/

private var age:Int = 0

fun getAge() : Int{

return age

}

fun setAge(value: Int) {

if (value <0 || value > 150) {

println("传入的${age}值不规范 出现异常 请检查代码")

return

}

age = value

}

/**

* sex用private私有修饰,外界其他地方不准访问,隐藏细节

* sex提供set get 方法 对外暴露功能

* 对细节隐藏,只暴露自定义暴露的东东,就是属于封装的体现

*/

private var sex:String = ""

fun getSex() : String {

return sex

}

fun setSex(sex : String) {

if ("男".equals(sex) || "女".equals(sex)) {

this.sex = sex

return

}

println("传入的${sex}值不规范 出现异常 请检查代码")

}

/**

* 获取父类Person的personName

*/

override var personName: String

get() = super.personName

set(value) {personName = value}

}

/**

* main测试方法

*/

fun main(args: Array) {

var student = Student()

// 设置所以属性信息

setAllData(student)

// 打印所以属性信息

toAllInfoShow(student)

}

/**

* 设置所以属性信息

*/

fun setAllData(student: Student) {

student.setName("猪小明")

student.setAge(99)

student.setSex("男")

}

/**

* 打印所以属性信息

*/

fun toAllInfoShow(student : Student) {

println("name:${student.getName()}, age:${student.getAge()}, sex:${student.getSex()}")

}

在Kotlin中,getter和setter是可选的,如果你没有在代码中创建它们,它是会默认自动生成,是看不到的:

class Account {

var name: String = ""

var age: Int = 0

var balance: Double = 0.0

}

以下的代码,就算不写getter/setter,默认也会生成getter和setter,例如:

class Account {

var name: String = ""

var age: Int = 0

var balance: Double = 0.0

// 这种set和get方法不推荐在代码中自己手动去写

set(vaule){

field = value

}

get() = field

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值