一、首先看一个简单类和方法的实现
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.)
}