学习内容
1.类的声明
2.抽象类与接口
3.伴生类
4.数据类
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关键字声明一个单例
*/
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 //抽象方法
/**
* 默认是final,不可重写
* 如果想要重写改方法需要在
* 方法前加open关键字
*/
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
//次级构造方法
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)"
}
}
/**
* 构造方法声明
*/
class Person1(var name:String,var age:Int,var sex:Int){
override fun toString(): String {
return "Person(name:$name,age:$age,sex:$sex)"
}
}
/**
* 数据类
* 主构造函数至少包含一个参数
* 参数必须标示为val或者var
* 不能为abstract,open,sealed,inner
* 不能继承其他类
*
*/
data class LoginUser(val name:String,val password:String) {
}