کلاس های انتزاعی
kotlin abstract Classes
همانند جاوا، کاتلین نیز کلیدواژه abstract را برای تعریف کلاسهای انتزاعی در اختیار ما قرار داده است. یک کلاس Abstract (به فارسی: انتزاعی) قابل نمونهسازی نیست؛ یعنی نمیتوانید شیای از روی این کلاسها بسازید، با این حال امکان ساخت زیرکلاسی از آنها وجود دارد. اعضای یک کلاس انتزاعی (پراپرتیها و متدها)، انتزاعی نیستند مگر به صراحت با کلیدواژه abstract انتراعی بودنشان را اعلام کنیم.
مثال:
1 2 3 4 5 6 7 8 | abstract class Person { var age: Int = 40 fun displaySSN(ssn: Int) { println("My SSN is $ssn.") } abstract fun displayJob(description: String) } |
در این کد:
- کلاس Person انتراعی تعریف شده است؛ یعنی نمیتوانید از روی آن نمونهسازی کنید؛
- این کلاس یک پراپرتی غیرانتزاعی تحت عنوان age و متدی غیرانتزاعی با نام ()displaySSN دارد. اگر تحت شرایطی نیازمند Override کردن این دو عضو در زیرکلاس دیگری باشید. بایستی حتماً کلیدواژه open در ابتدای نسخۀ سربارگذاری شده قرار گیرد؛
- همچنین متدی انتزاعی تحت عنوان ()displayJob نیز وجود دارد که هیچ پیادهسازی نداشته و بایستی در زیرکلاسها پیادهسازی شود.
توجه: کلاسهای انتزاعی همیشه open هستند، بنابراین ارثبری از آنها نیازمند کلیدواژه open نیست.
مثالی از کلاسها و متدهای Abstract در کاتلین
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | abstract class Person(name: String) { init { println("My name is $name.") } fun displaySSN(ssn: Int) { println("My SSN is $ssn.") } abstract fun displayJob(description: String) } class Teacher(name: String): Person(name) { override fun displayJob(description: String) { println(description) } } fun main(args: Array<String>) { val jack = Teacher("Jack Smith") jack.displayJob("I'm a mathematics teacher.") jack.displaySSN(23123) } |
خروجی:
1 2 3 | My name is Jack Smith. I'm a mathematics teacher. My SSN is 23123. |
در اینجا کلاس Teacher از کلاس انتزاعی Person مشتق و شی jack از کلاس Teacher نمونهسازی شده است. سپس عبارت Jack Smith به عنوان پارامتری به سازنده اولیه ارسال شده است. این کار باعث اجرای بلاک initializer کلاس Person میشود. در ادامه متد ()displayJob بر روی شی jack فرخوانی میشود. این متد انتزاعی و متعلق به کلاس پایه بوده، بنابراین در نسخه Override شده در زیرکلاس Teacher پیادهسازی شده است. نهایتاً متد ()displaySSN روی شی jack فرخوانی شده است. این متد غیرانتزاعی و متعلق به کلاس Person است.
kotlin abstract Classes kotlin abstract Classes kotlin abstract Classes kotlin abstract Classes kotlin abstract Classes kotlin abstract Classes kotlin abstract Classes kotlin abstract Classes kotlin abstract Classes kotlin abstract Classes kotlin abstract Classes