學(xué)習(xí)內(nèi)容
1.類的聲明
2.抽象類與接口
3.伴生類
4.數(shù)據(jù)類
package day1
class DemoClass
fun main(args:Array<String>){
val demo = DemoClass()
println(demo)
println(demo is DemoClass)
println(demo::class)
var p = Person1("Tom",30,1)
println(p)
var p2 = Person2()
p2.age = 30
p2.name = "Tim"
p2.sex = "M"
println(p2)
var rc = Retangle(3.0,4.0,5.0)
println(rc.area())
rc.onClick()
var cl = Circle(3.0,4.0,10.0)
println(cl.area())
cl.onClick()
val pp = Project()
pp.print()
println(User.name)
println(User.password)
User.hello() //與Java使用方式一樣
DataProcessor.processData()
val loginUser = LoginUser("admin","123")
val (username,password) = loginUser
println("username=${username},password=${password}")
val map = mapOf(1 to "A",2 to "B",3 to "C")
println(map)
}
/**
* 伴生類
*一個類只能有一個伴生類
*/
class DataProcessor{
companion object DataProcessor{
fun processData(){
println("I am a processor class")
}
}
}
/**
* object
* 使用object關(guān)鍵字聲明一個單例
*/
object User{
val name:String = "Admin"
val password:String = "Admin"
fun hello(){
println("Hello world")
}
}
interface ProjectS{
var name:String
var age:Int
fun come()
fun print(){
println("project save")
}
}
class Project:ProjectS{
override var name: String
get() = name
set(value) {
this.name = value
}
override var age: Int
get() = age
set(value) {
this.age = value
}
override fun come() {
super<ProjectS>.print()
println("Project coming")
}
}
/**
* 抽象類
*/
abstract class Shape{
//抽象類對成員也必須是抽象的
abstract var width:Double
abstract var height:Double
abstract var radius:Double
abstract fun area():Double //抽象方法
/**
* 默認(rèn)是final,不可重寫
* 如果想要重寫改方法需要在
* 方法前加open關(guān)鍵字
*/
open fun onClick(){
println("Item click")
}
}
class Circle(override var width: Double, override var height: Double,
override var radius: Double): Shape() {
override fun area(): Double {
return Math.PI*radius*radius
}
override fun onClick() {
super.onClick()
println("Circle click")
}
}
class Retangle(override var width: Double, override var height: Double,
override var radius: Double):Shape(){
override fun area(): Double = width*height
}
class Person2{
lateinit var name:String; //lateinit表示延遲初始化
var age:Int = 0;//lateinit不能修飾Int類型
lateinit var sex:String
//次級構(gòu)造方法
constructor(name: String, age: Int, sex: String) {
this.name = name
this.age = age
this.sex = sex
}
constructor(name: String) {
this.name = name
}
constructor(name: String, age: Int) {
this.name = name
this.age = age
}
constructor()
override fun toString(): String {
return "Person(name:$name,age:$age,sex:$sex)"
}
}
/**
* 構(gòu)造方法聲明
*/
class Person1(var name:String,var age:Int,var sex:Int){
override fun toString(): String {
return "Person(name:$name,age:$age,sex:$sex)"
}
}
/**
* 數(shù)據(jù)類
* 主構(gòu)造函數(shù)至少包含一個參數(shù)
* 參數(shù)必須標(biāo)示為val或者var
* 不能為abstract,open,sealed,inner
* 不能繼承其他類
*
*/
data class LoginUser(val name:String,val password:String) {
}