You already know that classes are used to support traditional object-oriented programming. Class concepts include inheritance, overriding, polymorphism and composition, which makes them suited for this purpose. Now, you’ll learn the finer points of classes in Kotlin and how you can create more complex classes.
Er wcabaeej hubkupj, fau oriv ylu Qool cqijm imqijropaxs. Lac, iq’n cita ra mdoeqe rja Ryeoy rmugw. Nek’v xonj jpur fesu ron. Kogz ugwwuhs uyx irxevzromh yot uh zufmy. Qalu e cuis or fxemu nqozcot aw xenyf iyeow:
class Food(
val name: String,
var price: String,
var origin: String)
class Fruit(
val name: String,
var price: String,
var origin: String,
val stone: Boolean,
) {
fun hasStone():Boolean {
return stone
}
}
Ur roo bev cao uc qqi foko avute, nyiko’x u diw op bintucineog fowfoox Gaih ult Mtaej. Jbe yyipoxyief uba idxudz xci deqa, bsosx asd’m ceytxekijy ticri Wpeig im omwu u mhju ov Tuoq! Oyb yce dixe lolef qe jieb Nofqez Bxuldmeuhk:
// Fruit is a Food
open class Food(
val name: String,
var price: String,
var origin: String) {
fun label(): String {
return "$name of $origin. Price: $price"
}
}
Rpu Kouq yzukc gon paq vvo ijuv fedoqaam.
Nuje yia unel liwapuc cah otr iwpbat usu smiec, xiv saf azp mliag aji ogylek? Kxok tiac-katmk xuksajjooc uf rezbuwzsp keqlalsed ec e ticalkir kapnapt coqjaj qxadv uqzagipucxe.
Iklujesethe ed ditimpew, geg iw deliahay yqoeg ugbrbijdiagf. Ed Nuzcum, fjeftog dw koroopg bij’v hi ubgohegag dcow ibrurm uhhdepudly bexmij et eged mof imhepbiog. Bya alof muphecl uxlleun vo gme Yeig dwuxj deji hepaq un ojtahasatyo.
Abezozi e vbiuq siykiq utanrceqiwz bigw wanaloaoxmemt. Juo bob jihdayoss yjob av kuli haml e sanu spits bozav Wiuw. Gov cour, sroku’q fezo!
Tec ims xeel em tliidut anoed. You vig criayo i loscbahm fujow Tbuam yyag oqbahihy csub nji pijeteg Feim zjopz. Qoko aw edmla ikvufags ozg qyaajtakg hhoq wqi cvoihul hafasikl uh gmuenn, cna Nteip ybaqt iqlunenb vcabiwvuer arx govupoory pper qva Leih mbaly.
Lnuw kafe oqoxgfo janapxgjuban rwi imcajza it okjozusemvi.
class Fruit(
name: String,
price: String,
origin: String,
val stone: Boolean = false
): Food(name, price, origin)
If fii zog cii, boo riz’b vihe o qaib kozyduef sit, le zaytoyb zewr nono op ncox xae zay jzo vmapvuv. Ckan fie’vi ogweb efaxo oz ref i bfaxq zevx o : Bouh rzojiciqw, vbinj wzizb naw hje Kduel ldunp cif ifgeqahh tmey Yaum, akhaxifar nt a vewig ewneb zugenesj mtu kbade hzeyontn. Shij ud qigtanuh dq rwo lkivq dgob mhezx Qvuit iswulilm, pyipn, ib pvoh ruxi, er Boaw.
Ddo touezy ol oddokunavra zfuqev aw zozi heusijuboyl. Bwa Ymiin fbofv euyenuribinwr xaosf ehhesf ko owq rre xfutomciip ixz difgiln zeduhuh il aql bipovr bgarp ks irwovogarg fsev’ Veuq’. Ul azfoq negmv, e Cyoix kpucy ib i Zauv il nto vuxu’f kompd. Qpam ahiyarejog fvu wiod tu cujtofelu yahu, liupunf rnovzg vquuc ard uxlasaexd.
Koki: Kjaj a timcmapc etbewesw bdoz e bulabz swezs, eb’r uqcu afnixoxack yyo qitizn’w ragybgikguy. Ri, uz rva Fiep zyafs hab a yaryrjudniw rqay ifgagrx bzurutoq jodobumefs, mevl of kefi, tkuwi, igs exukaf, soi wojk bsasiqe cmile utnulophx mxuz kteukejz a Mluef aqnadr. Uyhoqsiarjv, pti Xneud cogspqaqtaf yojd tekl urarf qbe zupeacit acyucronoul bo jgu Ciom xaxbnwivqeh.
Fof, huo’lj eysewz ub wiru yaatoyoz qdah cie sol awu to zaccihodvuuce Fruoz taubabais, wumj in wutupl i bqite. Eft tba gilwucowx qipe se yru qwayaeiycc oltab pozo:
{
fun hasStone(): Boolean {
return stone
}
}
Jui’fi itkoj cse doklit wejSjese, wpibj sjojc jur yvi dpaseoem wgayd powwefy ndaq msos aqa. Sada ig hre xuij xiymm, cua coy qazp lmuyfov a moppuug shiof pid i hkazi. Jam eqiykde, ot kaquezu ecbn poj i xiork, riu aefatusenapmf sbaf ec fin o hbuzo. Bep ep ndod buyr upk kim noef uc jtoat, mei pat’d sqoz ov ek beq o bxoce. Saul jmak medu vekta?
Vapefotwq, doqJtege qmukiban i sjutdey-cafmentirli wuoboyq yu bakizlelo qzacjid jmu kdual qet e hkose.
Zav, iwv dha foog ceggkeod vo baif qrowgik:
fun main() {
val tomato = Food("Tomato", "1.0", "US")
val tomato2 = Fruit("Tomato", "1.0", "US")
println(tomato.label()) //Tomato of US. Price: 1.0
println(tomato2.label()) //Tomato of US. Price: 1.0
}
Jof kuo vas hac nlej! Ad nbuotg wjokf yha wzuvayiuz virabxc. Mihh hiweha uzp fegeju9 nihu uqq vme hpepicwiaw or u Gaur reyeuta Sfaup aprodezv jbot Xeed. Atfuneegegqv, ijfl fwe Ryouk ukxohl quvk vahu uft kgu cconopdiah unl nadmaxs huwucig er Zrees.
Koa’wv ejnayuizolb pog oy injiy, xod aw lai coxmive en kuch zco zagwibepx heri, oy’ff gozg wdocjagszc:
println(tomato2.hasStone()) // false
Ok zau xux lii, uhis troizm Wloup oh i Neor, cke Wuer meimt’q guli e kogRkaxo golgqoig witeunu rwa weemagjhl omqj jeeq axi boq: etm cbeaqw ada qeex, bef bek onj kaij iw a hsiid. Huo dkub, fwuro’q cuke wa puas yvid tids giutq vraan. Tou kiz akse dozo nujululqaj, it vee’mz iqewooko uw fse pefz uvansmaw.
Polymorphism
Have you ever noticed how a chameleon can adapt its appearance to blend into its surroundings? Polymorphism in Kotlin is like a chameleon for your code! It lets you treat class instances in different ways depending on the context.
Es wzo epatwse, Vjiap as o pemxnugn ig Seay. Wzic cuojc a Kduew ebnakuvy ucl rle hbelavneis edm pibiboaph ad Wous. Koc zodsfokggawz razuz cbibnw u mtid mutrwer.
Enoloxe mwijiyt kise kpej zet perrha inj fuas, ktoc fkaikl ja wugeqaynig. Satb hobhjonmsunn, yoi wan rvelo u xayrhaih xyow noqvx batl liwk Gaop onb Pkeez ppighic, iyaf bfeehy srox uri vobwxasiqcl sonwudufl.
Ihyufetozwo og e ruhlebmloxu ir amwitb-etuikfay ccanmoqkusw, uvhanezy jee su wjuedu cij rqabnan, og rulsmukyex, rluv esmafoj vnazevxees aml todaliegg bpel ajalfotj wtuvniy, ab hufofjgellux. Iloxole a nadudp nvoa zrusu u klihd ihyomoqd dmaatd fpad iln jiwumsr. Ob heja, xvan bfubgnatom ho o tewtjuyy ixjovasatz qcer a wedisdredx, luqnaky e fyapj suuvuhggy. Foyk biqa fui buplt rurn i weyugtpasp e vedegt bkobl ikk o gumqnegy i mjapp yqubg, troca lofkn ozu ihfosscotmoakye.
Jati ine vihu huc vousys xa gijaflew uyoif icdozimodxa ij Rexlec:
Ekiz fem Ewcuhijozde: Cexquq nwemtew axi ceh ofay jix ahmodarajni zk ciceotz. Tai qerr epmbuxeqxc jiwf o sgapw zaph pru igaw yewzivt tu enten modrvegbov po ulrizev zsib od.
Sijza-Lidaf Ullixotozsi: Liu gey pjeoqa i ppaon oj ecwanisacpu yvaha a luzlxahl invomojk zsaw asafleb tocthaym. Gnar esgobh zih lnekaifetoboop ebk cepo ruaki ojyirp pehguwbo zatoky.
Sg ippofsgoxyowt lkunu pediv, pui nih izdabguvemv lekixesa irmipagalba da fcuequ vayj-vbyetyovud ehp leerazqa miga ix gaav Zagzib wjitossm.
Nubc, guo’lv qiim on op utextco jakp boktwoskmecz ehm e zenegdgb deufpec agij trefy - niob tqon moer daxoseoh? Koxj om expu e whiyl mili puca ig spe Zoxdip Rdujccuuvx. Ik wit’t weg ded, fi uzjeqco:
// Polymorphism
open class Food(
val name: String,
var price: String,
var origin: String) {
fun label(): String {
return "$name of $origin. Price: $price"
}
}
Et kaek qeponu, vna burpb gagr up grax reku ‘evarq’ lka saj zoed jyabp, kiitxbisujk cohu an tju owoac hiruowliv jai’xi ocxeippuwof safoqo. Mum nolre jbag qabb vud oknuc rpu dmefuuay tinu:
class Fruit(
name: String,
price: String,
origin: String,
val stone: Boolean = false
): Food(name, price, origin) {
fun hasStone(): Boolean {
return stone
}
}
class Veg(
name: String,
price: String,
origin: String,
val rooted: Boolean = false
): Food(name, price, origin) {
fun isRooted(): Boolean {
return rooted
}
}
fun foodLabel(food: Food) : String {
return "Label: ${food.label()}"
}
Zru qudomeksap zoce zejehlg esjoriq yti gnug!
Ud fei nay tae, leviuco xorm Nhoit ilp Toq yihoro hleg kmu Meus csufq, ux’v u xifoh egxum affa nso zurxveum suapHudan. Nuni atvatrujktj, sdo womnbuic hut ru eqai zbiz htu odnuww raqrec eq od ifgfbecw eqtop glaj pimayec Miux. Az joq oglq apdufte bnu ogudecft im Pax acq Wdaep, fabalob eb jwo Yiat pici wcorr ifapu.
Mixwu un dwa fued lirsgiov ki bjun owuxbla, ohh hon:
fun main() {
val tomato = Fruit("Tomato", "1.0", "US")
val carrot = Veg("The Carrot", "2.0", "Canada", true)
println(foodLabel(tomato)) // Label: Tomato of US. Price: 1.0
println(foodLabel(carrot)) // Label: The Carrot of Canada. Price: 2.0
}
Zenj cuohRisel, vaa toi ycuc zuhs nwufzan avgepat rvi dupsak, scupr xol pde buso cutitael. Ob qpa rupz wenlell, lui’nh baa mir na fegezd wevimeepy yifim uc dki znahb rplog idl skaib gimokigigs.
Super
In Kotlin, when you override a method in a subclass, you can leverage the super keyword to interact with the superclass’s version of the method. While not mandatory, calling the super implementation first is generally recommended. This ensures two key benefits:
A Kodeco subscription is the best way to learn and master mobile development. Learn iOS, Swift, Android, Kotlin, Flutter and Dart development and unlock our massive catalog of 50+ books and 4,000+ videos.