نکتههای اساسی در زمینه ی وراثت در کاتلین
چنانچه کلاس یک تولید کننده نخستین داشته باشد، پایه بایستی با به کارگیری از پارامترهای آفریننده اول مقداردهی گردد. در اپ فوق، هر دو کلاس مشتقگردیده دارنده پارامترهای age و name می باشند و هر دوی این پارامترها در تولید کننده اول کلاس اساس مقداردهی می شوند. به نمونه طراحی اپلیکیشن در مشهد تحت دقت نمایید:
1open class Person(age: Int, name: String) {
2 // some code
3}
4
5class Footballer(age: Int, name: String, club: String): Person(age, name) {
6 init {
7 println("Football player $name of age $age and plays for $club.")
8 }
9
10 fun playFootball() {
11 println("I am playing football.")
12 }
13}
14
15fun main(args: Array) {
16 val f1 = Footballer(29, "Cristiano", "LA Galaxy")
17}
مشاهده بی نقص کدها
در کد فوق، آفریننده اول کلاس مشتقگردیده 3 پارامتر دارااست و کلاس اساس دارنده 2 پارامتر میباشد. دقت فرمائید که هر دوی این پارامترهای کلاس شالوده، مقداردهی گردیدهاند. در زمینهی خلا آفریننده نخستین، هر کلاس شالوده بایستی شالوده را مقداردهی نمایند یا این که خالق دیگری را کهاین شغل را مینماید نمایندگی نماید. به نمونه پایین اعتنا نمایید:
1fun main(args: Array) {
2
3 val p1 = AuthLog("Bad Password")
4}
5
6open class Log {
7 var data: String = ""
8 var numberOfData = 0
9 constructor(_data: String) {
10
11 }
12 constructor(_data: String, _numberOfData: Int) {
13 data = _data
14 numberOfData = _numberOfData
15 println("$data: $numberOfData times")
16 }
17}
18
19class AuthLog: Log {
20 constructor(_data: String): this("From AuthLog -> + $_data", 10) {
21 }
22
23 constructor(_data: String, _numberOfData: Int): super(_data, _numberOfData) {
24 }
25}
مشاهده بی نقص کدها
Override کردن تابعهای عضو و مشخصهها
در حالتیکه کلاس شالوده و کلاس مشتقگردیده مشتمل بر یک تابع (یا این که مشخصه) عضو با اسم یکسان باشند، میتوانید تابع عضو کلاس مشتقگردیده را با استعمال از کلیدواژه open برای تابع عضو کلاس اساس override نمایید.
مثالی از Override کردن تابع عضو
1// Empty primary constructor
2open class Person() {
3 open fun displayAge(age: Int) {
4 println("My age is $age.")
5 }
6}
7
8class Girl: Person() {
9
10 override fun displayAge(age: Int) {
11 println("My fake age is ${age - 5}.")
12 }
13}
14
15fun main(args: Array) {
16 val girl = Girl()
17 girl.displayAge(31)
18}
مشاهده بدون نقص کدها
خروجی نرم افزار فوق به طور پایین میباشد:
My fake age is 26.
در نرمافزار فوق، girl.displayAge(31) روال ()displayAge مرتبط با کلاس مشتقگردیده به اسم girl.displayAge(31) مبادرت به فراخوانی ()displayAge مینماید. قابلیت و امکان اُوراید کردن کلاس محور به نحوه شبیه نیز وجود داراست.
1// Empty primary constructor
2open class Person() {
3 open var age: Int = 0
4 get() = field
5
6 set(value) {
7 field = value
8 }
9}
10
11class Girl: Person() {
12
13 override var age: Int = 0
14 get() = field
15
16 set(value) {
17 field = value - 5
18 }
19}
20
21fun main(args: Array) {
22
23 val girl = Girl()
24 girl.age = 31
25 println("My fake age is ${girl.age}.")
26}
مشاهده بدون نقص کدها
خروجی نرمافزار فوق به طور ذیل میباشد:
My fake age is 26.
چنان که میبینید از کلیدواژههای override و open برای مشخصه age به ترتیب در کلاس مشتقگردیده و کلاس اساس به کار گیری کردهایم.
فراخوانی عضوهای کلاس محور از کلاس مشتقگردیده
قابلیت و امکان فراخوانی تابعها (و مشخصههای دسترسی) کلاس اساس از یک کلاسی مشتقگردیده با به کارگیری از کلیدواژه super وجود دارااست. به نمونه پایین دقت نمایید:
1open class Person() {
2 open fun displayAge(age: Int) {
3 println("My actual age is $age.")
4 }
5}
6
7class Girl: Person() {
8
9 override fun displayAge(age: Int) {
10
11 // calling function of base class
12 super.displayAge(age)
13
14 println("My fake age is ${age - 5}.")
15 }
16}
17
18fun main(args: Array) {
19 val girl = Girl()
20 girl.displayAge(31)
21}
مشاهده بی نقص کدها
خروجی نرم افزار فوق به طور پایین میباشد:
My age is 31.
My fake age is 26.
نکتههای اساسی در زمینه ی وراثت در کاتلین
چنانچه کلاس یک تولید کننده نخستین داشته باشد، پایه بایستی با به کارگیری از پارامترهای آفریننده اول مقداردهی گردد. در اپ فوق، هر دو کلاس مشتقگردیده دارنده پارامترهای age و name می باشند و هر دوی این پارامترها در تولید کننده اول کلاس اساس مقداردهی می شوند. به نمونه طراحی اپلیکیشن در مشهد تحت دقت نمایید:
1open class Person(age: Int, name: String) {
2 // some code
3}
4
5class Footballer(age: Int, name: String, club: String): Person(age, name) {
6 init {
7 println("Football player $name of age $age and plays for $club.")
8 }
9
10 fun playFootball() {
11 println("I am playing football.")
12 }
13}
14
15fun main(args: Array) {
16 val f1 = Footballer(29, "Cristiano", "LA Galaxy")
17}
مشاهده بی نقص کدها
در کد فوق، آفریننده اول کلاس مشتقگردیده 3 پارامتر دارااست و کلاس اساس دارنده 2 پارامتر میباشد. دقت فرمائید که هر دوی این پارامترهای کلاس شالوده، مقداردهی گردیدهاند. در زمینهی خلا آفریننده نخستین، هر کلاس شالوده بایستی شالوده را مقداردهی نمایند یا این که خالق دیگری را کهاین شغل را مینماید نمایندگی نماید. به نمونه پایین اعتنا نمایید:
1fun main(args: Array) {
2
3 val p1 = AuthLog("Bad Password")
4}
5
6open class Log {
7 var data: String = ""
8 var numberOfData = 0
9 constructor(_data: String) {
10
11 }
12 constructor(_data: String, _numberOfData: Int) {
13 data = _data
14 numberOfData = _numberOfData
15 println("$data: $numberOfData times")
16 }
17}
18
19class AuthLog: Log {
20 constructor(_data: String): this("From AuthLog -> + $_data", 10) {
21 }
22
23 constructor(_data: String, _numberOfData: Int): super(_data, _numberOfData) {
24 }
25}
مشاهده بی نقص کدها
Override کردن تابعهای عضو و مشخصهها
در حالتیکه کلاس شالوده و کلاس مشتقگردیده مشتمل بر یک تابع (یا این که مشخصه) عضو با اسم یکسان باشند، میتوانید تابع عضو کلاس مشتقگردیده را با استعمال از کلیدواژه open برای تابع عضو کلاس اساس override نمایید.
مثالی از Override کردن تابع عضو
1// Empty primary constructor
2open class Person() {
3 open fun displayAge(age: Int) {
4 println("My age is $age.")
5 }
6}
7
8class Girl: Person() {
9
10 override fun displayAge(age: Int) {
11 println("My fake age is ${age - 5}.")
12 }
13}
14
15fun main(args: Array) {
16 val girl = Girl()
17 girl.displayAge(31)
18}
مشاهده بدون نقص کدها
خروجی نرم افزار فوق به طور پایین میباشد:
My fake age is 26.
در نرمافزار فوق، girl.displayAge(31) روال ()displayAge مرتبط با کلاس مشتقگردیده به اسم girl.displayAge(31) مبادرت به فراخوانی ()displayAge مینماید. قابلیت و امکان اُوراید کردن کلاس محور به نحوه شبیه نیز وجود داراست.
1// Empty primary constructor
2open class Person() {
3 open var age: Int = 0
4 get() = field
5
6 set(value) {
7 field = value
8 }
9}
10
11class Girl: Person() {
12
13 override var age: Int = 0
14 get() = field
15
16 set(value) {
17 field = value - 5
18 }
19}
20
21fun main(args: Array) {
22
23 val girl = Girl()
24 girl.age = 31
25 println("My fake age is ${girl.age}.")
26}
مشاهده بدون نقص کدها
خروجی نرمافزار فوق به طور ذیل میباشد:
My fake age is 26.
چنان که میبینید از کلیدواژههای override و open برای مشخصه age به ترتیب در کلاس مشتقگردیده و کلاس اساس به کار گیری کردهایم.
فراخوانی عضوهای کلاس محور از کلاس مشتقگردیده
قابلیت و امکان فراخوانی تابعها (و مشخصههای دسترسی) کلاس اساس از یک کلاسی مشتقگردیده با به کارگیری از کلیدواژه super وجود دارااست. به نمونه پایین دقت نمایید:
1open class Person() {
2 open fun displayAge(age: Int) {
3 println("My actual age is $age.")
4 }
5}
6
7class Girl: Person() {
8
9 override fun displayAge(age: Int) {
10
11 // calling function of base class
12 super.displayAge(age)
13
14 println("My fake age is ${age - 5}.")
15 }
16}
17
18fun main(args: Array) {
19 val girl = Girl()
20 girl.displayAge(31)
21}
مشاهده بی نقص کدها
خروجی نرم افزار فوق به طور پایین میباشد:
My age is 31.
My fake age is 26.

کارداران اثر گذار بر CPC در تبلیغات