Kotlin的类(成员方法、成员变量)

一、首先看一个简单类和方法的实现

package net.println.kotlin.chapters

/**
 * @author:wangdong
 * @description:
 */
/**定义一个女生类*/
class girl(var character: String, var appearance: String, var age: Int){

    fun sing(songName: String){
        //具体实现
        println("正在唱歌:$songName")
    }

    fun dance(danceName: String){
        //具体实现
        println("正在跳舞:$danceName")
    }
}

fun main(args: Array<String>) {
    val linda = girl("温柔","漂亮",18)
    linda.sing("北京欢迎你")
    linda.dance("天鹅湖")
}

二、类和成员变量、成员方法
先看一下Java中的类和成员变量、方法

package net.println.kotlin.chapters;

/**
 * @author:wangdong
 * @description: Java中的类与成员变量
 */
public class JavaPerson {

    private String name;

    private Integer age;

    //java中没有初始化就是null
    private String school;


    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    public String getName() {
        return name;
    }
    //如果只允许它的子类才能设置,需要将public改为protected
    protected void setName(String name) {
        this.name = name;
    }
}

再看一下Kotlin中的类和成员变量

package net.println.kotlin.chapters

/**
 * @author:wangdong
 * @description:kotlin中的类和成员变量
 */

class Girl{

    var age = 18
    get() {
        println("我今年 $age 岁")
        return field
    }

    //加protected只允许子类设置
    protected set(value) {
        println("我今年 $value 岁")
    }
}

三、kontlin的类相关成员变量、方法的实例

package net.println.kotlin.chapters

/**
 * @author:wangdong
 * @description:kotlin中的类和成员变量
 */

/**类成员*/
/**
 * 属性:或者说成员变量,类范围内的变量
 * 方法:或者说成员函数,类范围内的函数
 */

/**函数和方法的区别*/
/**
 * 函数强调功能本身,不考虑从属
 * 方法的称呼通常是从类的本身角度出发的
 */

/**定义方法*/
/**
 * class Hello{
 *   fun sayHello(name: String) = println("Hello,$name")
 * }
 */

/**定义属性*/
/**
 * 在构造方法参数中 var和val修饰的都是属性
 * 类内部也可以定义属性
 *
 * class Hello(val aField: Int,bField: Int){
 *       var anotherField: Float = 3f
 * }
 */

/**属性访问控制*/
/**
 * val a: Int = 0
 * get() = field
 * 不能定义set,因为val是不可变的
 *
 * var b: Float = of
 * set(value){
 *   field = value
 * }
 */

/**属性的初始化步骤*/
/**
 * 属性的初始化,尽量在构造方法中完成
 * 无法在构造方法中进行初始化,尝试降级为局部变量
 * var 用lateinit延迟初始化,val用lazy延迟
 * 可空类型,不建议使用null
 */
/**
 * class Hello
 */
class X

class Girl{

    var b = 0
    //延迟初始化lateinit,只能放在var中
    lateinit var c: String
    lateinit var d: X
    val e: X by lazy {
        println("init X")
        X()
    }

    var cc: String? = null
}

fun main(args: Array<String>) {
    println("开始")
    val a = Girl()
    println("初始化")
    println(a.b)
    println(a.e)

    //延迟初始化,用的时候没有初始化访问会报错
    //kotlin.UninitializedPropertyAccessException: lateinit property c has not been initialized
    //println(a.c)
    //初始化后就不会报错了
    a.d = X()
    println(a.d)

    //输出null
    println(a.cc)

    //用的时候编译器就不允许了,a.cc.xxx后面为灰色不能使用
    //println(a.cc.)
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值