adrianfc
5/1/2020 - 8:46 AM

Classes

// Create Dog class and set properties to default value
class Dog {
  var name = ""
  var age = 0
}

// Create Dog Object
var dog = Dog()

// Set name property
dog.name = "Fido"

-----------------------------------


// Create Dog class while setting properties
class Dog(var name: String, var age: Int) {

} 

// Create Dog Object while setting properties as parameters
var dog = Dog("Fido", 5)

var dog = Dog(name = "Fido", age = 10)

------------------------------------

// Create a Dog class using init function
class Dog {
  var name: String
  var age:  Int

  init {
    name = ""
    age = 0
  }
}

---------------------------------------
// Create a Dog class using constructor
class Dog {
  var name: String
  var age:   Int

  constructor(name: String, age: Int) {
    this.name = name
    this.age = age
  }

  // Multiple constructors
  constructor(name: String, age: Int): this() {
    name = ""
    age = 0
  }

  var dog = Dog() 
  var dog = Dog("Adrian, 35 ")

// Add functions to classes
  fun dogInfo() {
    println("$name) is $age years old")
  }

}

----------------------------
// Aquarium

// add function in one line
fun volume() = width * height * length / 1000

// override getter to calculate value
val volume: Int
  get() {
    return width * height * length / 1000
  }

// setters
var volume: Int
  set(value) {
    height = (value * 1000) / (width * length)
  }

------------------------------
// Inheritance
open class Aquarium() {
  open var water
}

class TowerTank(): Aquarium() {
  override var water = volume * 0.8
}

--------------------------------
// Abstract classes
abstract class AquariumFish() {
    abstract val color: String
}

class Shark: AquariumFish() {
    override val color = "gray"
}  

----------------------------
// Interfaces
interface FishAction {
  fun eat() 
}

class Shark: AquariumFish(), FishAction {
  override val color = "gray"
  override fun eat {
    println("hunt and eat fish")
  }
}


fun feedFish(fish: FishAction) {
  fish.eat()
}

--------------------------------
// Singleton
object MobyDickWhale {
  fun jump() {
  // ...
  }
}

// Enums
enum class Color(val rgb: Int) {
  RED(0xFF0000),
  GREEN(0x00FFF00),
  BLUE(0x0000FF)
}

// Sealed Classes (class that can be subclassed but only in the same file in which it is declared)
sealed class Seal

class SeaLion: Seal()
class Walrus: Seal()