... | ... | @@ -95,39 +95,51 @@ println(p1.z) // 8 |
|
|
## Rozhranie, _interface_
|
|
|
|
|
|
- Rozhranie je trieda bez implementácie, obsahuje iba holé názvy metód.
|
|
|
- Metódy musia byť poriadne zdokumentované, aby sa vedelo, čo sa od implementácie má očakávať.
|
|
|
- Triedy implementujú rozhranie, pričom musia implementovať všetky metódy.
|
|
|
- Tieto triedy sa potom môžu použiť na mieste, kde má byť použité rozhranie.
|
|
|
|
|
|
|
|
|
```kotlin
|
|
|
interface Countable {
|
|
|
fun count(): Int
|
|
|
interface Generator {
|
|
|
/**
|
|
|
* Takes two numbers and generates another number based on the input.
|
|
|
*/
|
|
|
fun generateHash(num1: Int, num2: Int): Int
|
|
|
}
|
|
|
|
|
|
class Three : Countable {
|
|
|
override fun count(): Int = 3
|
|
|
class MultiplyGenerator : Generator {
|
|
|
override fun generateHash(num1: Int, num2: Int): Int = num1 * num2
|
|
|
}
|
|
|
|
|
|
class Five : Countable {
|
|
|
override fun count(): Int = 5
|
|
|
class SumGenerator : Generator {
|
|
|
override fun generateHash(num1: Int, num2: Int): Int = num1 + num2
|
|
|
}
|
|
|
class Printer {
|
|
|
fun printOnPaper(countable: Countable) {
|
|
|
println("The amount is " + countable.count())
|
|
|
|
|
|
class Randomizer {
|
|
|
fun randomizeNumbers(numbers: List<Int>, generator: Generator): List<Int> {
|
|
|
val generatedNumbers = mutableListOf<Int>()
|
|
|
for (i in 0 until numbers.size step 2) {
|
|
|
if (i + 1 == numbers.size) break
|
|
|
val generatedNumber = generator.generateHash(numbers[i], numbers[i+1])
|
|
|
generatedNumbers.add(generatedNumber)
|
|
|
}
|
|
|
return generatedNumbers
|
|
|
}
|
|
|
}
|
|
|
|
|
|
fun main(args: Array<String>) {
|
|
|
val printer = Printer()
|
|
|
printer.printOnPaper(Three())
|
|
|
printer.printOnPaper(Five())
|
|
|
val randomizer = Randomizer()
|
|
|
val firstNine = listOf(1, 2, 3, 4, 5, 6, 7, 8, 9)
|
|
|
println(randomizer.randomizeNumbers(firstNine, MultiplyGenerator()))
|
|
|
println(randomizer.randomizeNumbers(firstNine, SumGenerator()))
|
|
|
}
|
|
|
```
|
|
|
|
|
|
> Všimnite si, že v predošlom príklade sme zbytočne vytvárali nový objekt `Printer`.
|
|
|
> Všimnite si, že v predošlom príklade sme zbytočne vytvárali nový objekt `Randomizer`.
|
|
|
Stačí nám predsa iba jeden objekt, nad ktorým budeme volať metódy.
|
|
|
Jeden objekt vytvoríme nahradením kľúčového slova `class` za slovo `object`.
|
|
|
Metóda sa potom zavolá cez názov objektu, t.j. `Printer.printOnPaper()`.
|
|
|
Metóda sa potom zavolá cez názov objektu, t.j. `Randomizer.randomizeNumbers`.
|
|
|
|
|
|
### HW
|
|
|
|
... | ... | |