定义一个可以被继承的类:open关键字
属性列表:constructor
open class BaseDao constructor(var sex : Boolean, var name : String) {}
//类ADao继承了BaseDao 类,可以选择是否设置默认值
//有默认值的情况下,可以不传参数
class ADao(sex : Boolean = false, name: String = "你好") : BaseDao (sex = false, name = "22") {
}
实例化一个类即Java中的new一个 类
var baseDao = BaseDao (false, "")
var aa= ADao(true, "")
普通属性和组合属性
class ADao(sex: Boolean, name: String = "你好") : BaseDao(sex = false, name = "22") {
//普通属性
var p = "22"
//组合属性
var lift: Double
get() {
when (this.name) {
"张飞" -> {
return 89.5
}
"诸葛亮" -> {
return 78.6
}
}
return 58.3
}
set(value) {
when (this.name) {
"张飞" -> {
this.sex = true
}
"孙尚香" -> {
this.sex = false
}
}
}
}
子类属性覆盖,和方法覆盖(即Java中的重写)
父类需要加open关键字
open class BaseDao constructor(var sex : Boolean, var name : String) {
open var father = "父亲"
open fun play (){
super.father
}
}
子类需要加override 关键字
class ADao(sex: Boolean, name: String = "你好") : BaseDao(sex = false, name = "22") {
override var father = "父亲"
override fun play (){
}
嵌套类和内部类
class News {
private var cc = "cc"
//嵌套类,与主类关系并不是十分密切,只是一个形式上的合作
class Cate{
}
//内部类,通常用于不直接对外的类,为主类服务的,可以直接访问主类的属性
inner class Lun{
fun getLang( str : String){
cc = str
}
}
}
fun main(args: Array<String>) {
//实例化内部类
News().Lun().getLang("hello ")
}
数据类
data class MyData(var id: Int, var name: String, var sex : Boolean)
fun main(args: Array<String>) {
var data = MyData(1, "hello", false)
//数据类的序列化
data.toString()
//复制,生成一个对象的克隆,并更改属性
data.copy(2, "world", true)
//数据类对象的解构
var (id, name,sex ) = data
println("$id, $name")
//或
data.component1()
data.component2()
data.component3()
}
枚举类
enum class Size {
S,M,L,XL
}
fun main(args: Array<String>) {
//列举枚举类的常量
Size.values().joinToString()
Size.values().joinToString { it.name + "--" + it.ordinal }
//枚举常量名称和序号
Size.valueOf("S").name
Size.valueOf("S").ordinal
}
类型转换
//判断类型
var a = "";
if(a is String) {
}
if(a !is String) {
}
//类型转换有智能转换和手动转换
//智能转换
if(a is String) {
println(a.length)
}
//手动转换
//强制转换(转换失败直接报错)
var str = a as String
//安全转换(转换失败返回null)
var str2 = a as? String