Android Basics with Compose course  |  Android Developers

Android basics with compose course

Jetpack Compose

基于java,与java互通(可以相互调用)

应用框架指南 - Kotlin

Java2Kotlin 自动转化需要注意

类和对象 PascalCase

// 类:属性,方法,构造函数
// 默认构造函数不含形参constructor() 没有注解or可见性修饰符:();还没有形参,全省略
// 主要构造函数没有主体(不包含代码)
// 辅助构造函数可以初始化类,具有包含初始化逻辑的主体。如果类有主要构造函数,
// 则每个辅助构造函数都需要初始化该主要构造函数。
// private 可让您在类中隐藏自己的属性和方法,防止在类外未经授权的访问。
// priavte 可让您在软件包中隐藏类和接口,防止在软件包外未经授权的访问。
// public 类外部也可以访问
// protected 子类访问
// internal 相同模块才可以public
class SmartDevice {

	val name = "Android TV"
	var deviceState = "online"

	//开放给子类替换,子类方法中断父类定义的方法并替代执行内容
	open fun turnOn() {
		tuenOff()
	}
	
	open fun turnOff() {
	}
}

class SmartDeviceWithName(val name: String, val category: String) {}
class SmartDeviceWithConstructor(val name: String, val category: String) {
	var deviceState = "online"

	constructor(name: String, category: String, statusCode: Int) : this(name, category) {
		deviceStatus = when (statusCode) {
			0 -> "offline"
      1 -> "online"
      else -> "unknown"
    }
	}
}

val SmartTvDevice = SmartDevice() // val 说明SmartTvDevice不能再进行赋值
SmartTvDevice.turnOn()

IS-A 关系:父类单相对子类开放,两个类再定义上继承

//在 Kotlin 中,所有类默认都是最终类,也就是说您无法扩展这些类,因此必须定义类之间的关系。
open class SmartDeviceOpen(val name: String, val category: String) {}
class SmartTvDevice(deviceName: String, deviceCategory: String) :
	SmartDeviceOpen(name = deviceName, category = deviceCategory) {
	// SmartTvDevice 的 constructor 定义没有指定属性是可变的还是不可变的,
	// 这意味着,deviceName 和 deviceCategory 形参只是 constructor 形参,
	// 而不是类属性。您无法在类中使用这些形参,只能将其传递给父类构造函数。
	
	// setter getter 设置“虚拟”属性,可读可写,写时调用set,读时调用get
	var SpeakVolume = 2
		set(value) {
			if (value in 0..100) {
				field = value	
			}
		}

	var deviceState = "online"
		protected set(value) {
			field = value
	}
	// protected set

	// 重写,对父类开放的方法进行替换;多态时也会根据变量实际值执行不同方法实现
	override fun turnOn() {
		deviceStates = "off"
	}
	
	// 复用,对父类开放的方法增加至子类语句中
	override fun turnOff() {
		super.turnOff()
		println("复用")
	}
}

HAS-A 关系:住宅包含设备

class SmartHome(
	val smartTvDevice: SmartTvDevie,
	val smartLightDevice: SmartLightDevice
) {
	
	fun truenOnTv() {
		smartTvDevice.turnOn()
	}
	
	fun trunOffAllDevices() {
		trunOnTv()
		turnOnLight()
	}
}

属性、方法都可以替换

open class A() {
	var some = "ss"
	
	open val dev = "unknown"
}
class AB() :
	A() {
	
	override val devSon = "smart TV"
}