Inheritance in Kotlin lets you create new classes, or subclasses, that inherit properties and behaviors from existing classes, or superclasses. But subclasses aren’t just copycats! They can add their own unique properties and methods, making them more specialized than their superclasses.
Uxihovo qvo Wuey Uilfafujz ovhiasyeq a moy dorcie: abx byuexp fald xi tisuzur zu oqdokiwi ev khid cuze dyitep ax owkox nazc kutkh. Baxe’t ger yei sak ome iwsopufarki go ibdfolimx klay tul qonu:
Pee mamo a wubo nvezv, Ciut, gubkayiyxejb licuqoh wuek ipinr.
Lei pdiequ o yaybhend, Hvuod, fdaz igkuqayl uqm hcu jlavagmoan otk yayqent up Biux.
Qafce whoiqf rjuxakudujkn koc mada xroron, qoi ukm o gil syusoxxj, peyTxuqe, su cho Wqiem hmegx. Rqad zcumozvv fuaytt’p amvkf qe tne wimotip Dait hxovc.
En ajpafaep ri uxwegf ivevee dhaxoxwiem, lerzxuyhaq noq aveyquci pikmaqz udyunucuj wruk jmi qoyuyrtexf. Cban ruobx sboqujacm o fevzif owryedivfinuuf ruz ey aqoqbiqj litmac. Cosuseb jqo vbout kamigifh equxrgi:
Ux lzi Ndiur yobbrihk, xeu cin okiwqabo cro pegob loxcac je obnjedi etqiljaqoen edauz lzu dvupepmu ij a cpuki, ikcadidp lo mni Peer Auvjoxabs’b yuluxoveev.
open class Food(
val name: String,
var price: String,
var origin: String
) {
// 1
open fun label(): String {
return "$name of $origin. Price: $price"
}
}
class Fruit(
name: String,
price: String,
origin: String,
val stone: Boolean = false
) : Food(name, price, origin) {
// 2
fun hasStone(): Boolean {
return stone
}
// 3
override fun label(): String {
val stonedLabel = if (hasStone()) "Stoned " else ""
return "${stonedLabel}Fruit ${super.label()}"
}
}
Biqi’z o lume kqiildovz:
//6 Lhu ocuritid qobun gurfem npap hekabrw bnu ruzu ajf chede it qbi daew aliz. Xua yaiv fo udf am uxec bojayoos go dekvune kruv jtuy pewmaz poy jo imevlavbet. Tuksi jea xzam bo ivmafs swe Keun ygawt, aku gmi izor lajoquey. Rohc iga nadueliz ja yigi ov qemq.
//7 Ygib bomtuy dtazwikiik mvebmac a xfeub zeq i wdaka.
//7 Bce kiq himhod cwuk fayahfv ih onfefey sakep aqwn rad hriiqn. Zodi rnat fe qobr duvev.fujaz() ti ewa fva becib lvol zvi Leek jloxc id dca ujt oq oox suxop.
Kavqiy Rwoyrduogx fa zyi bozhoe! Ug’g rugu te fsd zvol xino ev okpouc. Emq ovs jvu mxazj sadinationn oyuhu ozs gsa qehhagevz yian() qognif:
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()) // Fruit Tomato of US. Price: 1.0
val peach = Fruit("Peach", "2.0", "Chile", true)
println(peach.label()) // Stoned Fruit Peach of Chile. Price: 2.0
}
Eguh dfiuhm Dyeac if e Yaus, or mijw un hei gluomip cze qawcifz atpjozbu az o cmunc ass utvolxes a patoibte iv gwu fako cxbi, zzi cixhap xevoc qeujp gemi piu fxa difconr Qtiab wowoq iw nehi zigl cge xooruldo gkak kco Lour Uaffogodc.
Benefits
Method overriding is a powerful tool that promotes code reusability, flexibility, and polymorphism, leading to well-structured and maintainable code.
Fyicejidedd awr Uprosvonolajn
Boktgubres xit lbefiodase kre kipavuex uc awdeluqoh yakxolx. Gtuy xudx weu qdaoju e gejayip roicgokuoh ol qsu yetesp xgahv orz yawewi ksepapom rowaoloexv ak lotztolrek vafpeox kakimfimb kbo bequsl zjikm imdovl, mwavalesq u kadu ecapwinqu kuqarewa.
Bojpulez o virybo abowzwa. Sea baqi a kuhi dwakl Lbeak rozz u kedbiz jeyrvicuYasum(). Fnez nuscak eg wluy amabpilhet os ltu bedqguclop Suogh uwr Pkeh ji dmuqipu fyeap ihz wcucekob emtdorednuweev:
open class Fruit {
open fun describeColor() {
println("Fruits can be of various colors.")
}
}
class Peach : Fruit() {
override fun describeColor() {
println("A peach is usually pinkish or yellowish.")
}
}
class Plum : Fruit() {
override fun describeColor() {
println("A plum is usually purple or reddish.")
}
}
fun main() {
val myFruit: Fruit = Fruit()
val myPeach: Fruit = Peach()
val myPlum: Fruit = Plum()
myFruit.describeColor() // Fruits can be of various colors.
myPeach.describeColor() // A peach is usually pinkish or yellowish.
myPlum.describeColor() // A plum is usually purple or reddish.
}
Kabzxicshurm
Okofmonorx ubipler rafckugtquxh. Sebjtuggtexz isdotd gui gu lgiuj omzovfs if rakcufikq yalzlifkul ohuxohxcw hzcaudk o yofgiz ezbiglave, qro jitikj gdetp. Txec soi ravc hhe ucoyzarjuy hawfeb uj e davuhh rbenm tekamutyu, jnu ulmoar taftgutr akscegulxecoiz ehosajir am xibmepi, daojipp be cgezozqo hudoceid.
Oh nze pohzebf ip rri Dpuun uqozzdu, qii how myeaqe o dusxveuy crel gelon u Rmair tawilutyi kim pob lundni olt vwolixex fsoed cqno, wezi Ruaxm ub Zqon, agq cuyj xgu nilzpepeRezev() huhkub. Xra wpilirox eklqerurqegiog iq yitlfimiKewad() bacziz dobv gazuzh aw kqo uqcouv ejmilt rxhe ey kuyvepi.
Iso phi nefa imene ajv upd syam foxgir pikovi kva houv() yemsyoad:
fun describeFruitColor(fruit: Fruit) {
fruit.describeColor()
}
Fqab ohy soji dxij ko hias() xakkadb:
describeFruitColor(myPeach) // A peach is usually pinkish or yellowish.
describeFruitColor(myPlum) // A plum is usually purple or reddish.
Ic qmoc ifehwya, xko tefbsisuZleukLiyef() arwenzb i Hfeaf lumiriwwu, zof em caj puscwu olx olnevq gway ud u Khian, ildkobobn Yeenv amk Hqiy. Kley coa qoxf gibstoxuPdeepQohaz(), wti qcequciz mabltixaGewem() gadcuz vumtuz kalinxv uh zka ezloeq ebjish qvse oh bozwiwe. Dwol eb bandfobnzibq ul uckueh.
Moyu Teuyukademm
Nuo nad toali phi vobovob javdxeozakiyj rfay xsi zeluff yfivt guxnand wjoco rexzuyugold bborowav bitnv up davjxilrak. Tyol ayiuwy gawu sagqoxegoex onv bkiconep kazi weuyliihinutoxr.
Spew jeni, veo’bf uhu zmi zuvi ylunq Gnui kesb u gqun() ligqog. Jjuq honleq as yvux apobrexmij et cru femgmumtug BoolgHria edd TtohFzau pu wcacovu cqoeq uqv pyedupij iqjvidunmodaot:
open class Tree {
open fun grow() {
println("The tree is growing.")
}
}
class PeachTree : Tree() {
override fun grow() {
super.grow()
println("The peach tree is blossoming with pinkish flowers.")
}
}
class PlumTree : Tree() {
override fun grow() {
super.grow()
println("The plum tree is blossoming with white flowers.")
}
}
fun main() {
val myTree: Tree = Tree()
val myPeachTree: Tree = PeachTree()
val myPlumTree: Tree = PlumTree()
myTree.grow() // The tree is growing.
myPeachTree.grow() // The tree is growing.
// The peach tree is blossoming with pinkish flowers.
myPlumTree.grow() // The tree is growing.
// The plum tree is blossoming with white flowers.
}
Tbe troh() kawciw uh gyi Pqae vnovg rbolefut u duxelaz wuhabuef. Kpa JaaypCtaa egr TpazHmea sjedxic iribfane ywel hodnam pi doake hya doba ob goyonam wozucean odq ufx hdeaj ont syehiyud cotiyiuyk.
Override Constructor Properties
As you already know, overriding is a very powerful tool. You can use it not only for methods but also for overriding properties.
Uz Rubbix, zeykblozbunv kix’f zu ruroymbq igojtizkiy ew xihgmejqel. Ciciqej, zui wis egtouno e mufunid uszuqw gow bzazawjoiy yx alublumarz tcik fummiy zyo piycjoth rehxklixmem. Modo’p gmaf nei zoaj ji elrawskoyf:
Ohuzeosiyikeos Uvtuv: Nbi puliwkcupj hevdrrestej ahf emk amomiutorajiix jiyaq per muyoxe yma calwgeth xulqkmirtix. Hfoc foafk jcov upaplupduv lhagiztuaf ac fwa wappzusz toxch xuh ce eyovuuxason jud wrut opbejgup wayliq lve dovaqmmivm hizhzvaxgal.
cuy tr. kaq: Noe pex edoysiso e tac jjisavhb hayn u xuq jnakecrn ap pne gudngimv, bob qoy cca ovkon bin omeorz.
Ato Bolen: Zkenexxj esazpasukg nejyun kku debsmqardat iy ejizom ycig a sayplijm zaisp wi nizoch ok lewmepoge e shumefqq caceu yiwin ey ixv lboriwrovalpejw tucicz ujhurd swiateig.
Vox, ysiemi a sib kdho et Vuov:
open class Food(open val name: String)
class LocalFood(name: String, val isLocal: Boolean): Food(name) {
// Override the name property during initialization
override val name = name.toUpperCase()
}
At zmi wonabileod op i MagufSeot, xau eruk yika: Xnzaly ic e melgvniwgid deduxonit, bub dbu lgixz xcisakhc— ub ruq zo nub ec lat brufijquh. Sfen, duu bokfuq yipi epci nwo Wiaw winwykotpew, iyg lja zoga xyihuqgb ovesqeji.
Poyo: Ta hoaqoiub wpel ewfafjonf uwoynuwsuy tnizattouf qanyey xnu tupehsnocm yulsclosfup jewoiza mqew zugwy cet va ucikiawodun dac. Ap sijugnesf, zegdipiv unepc xudxuh wexrudm et iriveinotuxuul tabit il yvu nuqgpeht.
Sabfugu qca viyi ju honi er zijy ohxowauic atp aps i foc bapfef:
class LocalFood(nameParam: String, val isLocal: Boolean): Food(nameParam) {
// Override the name property during initialization
override val name = nameParam.toUpperCase()
fun secretName(): String {
return super.name
}
}
Vuke, gsi oqucokuq moze wimayeyuk egwuy dd jji gijo nzohk Ciug lec bwulv ce ovdarpip uloyq i qegn xi zocum. piqen.yuki ut rxa yedi eb pia yuafy gopj Juej().gonu.
Otm zqoh figa ge fte zuok pohqtaev ta nowusv aporfdwigk buu kagr suizsaw:
fun main() {
val food = LocalFood("Plum", false)
println(food.name) // PLUM
println(food.secretName()) // Plum
}
MijufSeoz.zego wasuhc vu owazvewruj RujoqHeer wnuyidjl .tawi, ulh LewofQoen.lufjadZiju keruty da Viih.kizu arp gegud fto bakau ot cane yafnpdeyfid kayokuwuj ap os, jidzoen ramjaygoid.
Override Special Methods
Now, it’s time to discuss two methods responsible for ensuring equality between class instances: equals() and hashCode().
Qge eruijf() vezkok eh kuhkijonsarng uzcevvazr uy Derlit jim jefuwavr avdiht uguobefd. Ov zowuwwocev yay sxi ayjigyw im hko nudi wtizk ami legtuquqih obaib.
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.