Belajar Swift : Cara Pewarisan di Swift - Masnaato
Skip to content Skip to sidebar Skip to footer

Belajar Swift : Cara Pewarisan di Swift

Cara Pewarisan di Swift



Kemampuan untuk mengambil lebih dari satu bentuk didefinisikan sebagai Warisan. Umumnya kelas dapat mewarisi metode, properti, dan fungsionalitas dari kelas lain. Kelas dapat dikategorikan lebih lanjut ke dalam sub kelas dan kelas super.

  • Sub Kelas - ketika kelas mewarisi properti, metode dan fungsi dari kelas lain itu disebut sebagai sub kelas

  • Kelas Super - Kelas yang berisi properti, metode, dan fungsi untuk mewarisi kelas lain dari dirinya sendiri disebut sebagai kelas super

Kelas Swift 4 berisi superclass yang memanggil dan mengakses metode, properti, fungsi, dan metode penggantian. Selain itu, pengamat properti juga digunakan untuk menambahkan properti dan memodifikasi metode properti yang disimpan atau dihitung.

Kelas Dasar

Kelas yang tidak mewarisi metode, properti, atau fungsi dari kelas lain disebut sebagai 'Kelas Dasar'.

class StudDetails {
   var stname: String!
   var mark1: Int!
   var mark2: Int!
   var mark3: Int!
   
   init(stname: String, mark1: Int, mark2: Int, mark3: Int) {
      self.stname = stname
      self.mark1 = mark1
      self.mark2 = mark2
      self.mark3 = mark3
   }
}

let stname = "Swift 4"
let mark1 = 98
let mark2 = 89
let mark3 = 76

print(stname)
print(mark1)
print(mark2)
print(mark3)

Ketika kami menjalankan program di atas menggunakan playground, kami mendapatkan hasil sebagai berikut -

Swift 4
98
89
76

Kelas dengan nama kelas StudDetails diartikan sebagai kelas dasar di sini yang digunakan untuk memuat nama siswa, dan tiga mata pelajaran menandai sebagai mark1, mark2 dan mark3. kata kunci 'let' digunakan untuk menginisialisasi nilai untuk kelas dasar dan nilai kelas dasar ditampilkan di taman bermain dengan bantuan fungsi 'cetak'.

Subkelas

Tindakan mendasarkan kelas baru pada kelas yang ada didefinisikan sebagai 'Subclass'. Subclass mewarisi properti, metode, dan fungsi dari kelas dasarnya. Untuk mendefinisikan subclass ':' digunakan sebelum nama kelas dasar

class StudDetails {
   var mark1: Int;
   var mark2: Int;
   
   init(stm1:Int, results stm2:Int) {
      mark1 = stm1;
      mark2 = stm2;
   }
   func print() {
      print("Mark1:\(mark1), Mark2:\(mark2)")
   }
}

class display : StudDetails {
   init() {
      super.init(stm1: 93, results: 89)
   }
}

let marksobtained = display()
marksobtained.print()

Ketika kami menjalankan program di atas menggunakan playground, kami mendapatkan hasil sebagai berikut -

Mark1:93, Mark2:89

Kelas 'StudDetails' didefinisikan sebagai kelas super di mana nilai siswa dideklarasikan dan subkelas 'tampilan' digunakan untuk mewarisi nilai dari kelas supernya. Sub kelas mendefinisikan nilai siswa dan memanggil metode print () untuk menampilkan nilai siswa.

Utama

Mengakses instance kelas super, metode tipe, instance, properti tipe, dan subkelas subkelas menyediakan konsep penggantian. Kata kunci 'override' digunakan untuk menimpa metode yang dideklarasikan di superclass.

Akses ke Metode, Properti, dan Langganan kelas Super

Kata kunci 'super' digunakan sebagai awalan untuk mengakses metode, properti, dan subskrip yang dideklarasikan di kelas super

UtamaAkses ke metode, properti, dan langganan
Metodesuper.somemethod ()
Propertisuper.someProperty ()
Berlangganansuper [someIndex]

Metode Mengganti

Contoh yang diwariskan dan metode tipe dapat diganti dengan kata kunci 'override' ke metode kami yang ditentukan dalam subkelas kami. Di sini print () diganti dalam subclass untuk mengakses properti type yang disebutkan di super class print (). Juga instance baru kelas super cricket () dibuat sebagai 'cricinstance'.

class cricket {
   func print() {
      print("Welcome to Swift 4 Super Class")
   }
}

class tennis: cricket {
   override func print() {
      print("Welcome to Swift 4 Sub Class")
   }
}

let cricinstance = cricket()
cricinstance.print()

let tennisinstance = tennis()
tennisinstance.print()

Ketika kami menjalankan program di atas menggunakan playground, kami mendapatkan hasil sebagai berikut -

Welcome to Swift Super Class
Welcome to Swift Sub Class

Penimpaan Properti

Anda bisa mengganti instance yang diwariskan atau properti kelas untuk menyediakan pengambil dan penyetel kustom Anda sendiri untuk properti itu, atau untuk menambahkan pengamat properti untuk mengaktifkan properti pengganti untuk mengamati saat nilai properti yang mendasarinya berubah.

Overriding Property Getters and Setter

Swift 4 memungkinkan pengguna menyediakan pengambil dan penyetel khusus untuk mengganti properti yang diwariskan baik itu properti yang disimpan atau dihitung. Subclass tidak mengetahui nama dan tipe properti yang diwarisi. Oleh karena itu, penting bagi pengguna untuk menentukan dalam subkelas, nama dan tipe properti utama yang ditentukan dalam kelas super.

Ini dapat dilakukan dengan dua cara -

  • Ketika penyetel didefinisikan untuk menimpa properti, pengguna juga harus mendefinisikan pengambil.

  • Saat kita tidak ingin memodifikasi pengambil properti yang diwarisi, kita cukup meneruskan nilai yang diwarisi dengan sintaks 'super.someProperty' ke kelas super.

class Circle {
   var radius = 12.5
   var area: String {
      return "of rectangle for \(radius) "
   }
}

class Rectangle: Circle {
   var print = 7
   override var area: String {
      return super.area + " is now overridden as \(print)"
   }
}

let rect = Rectangle()
rect.radius = 25.0
rect.print = 3
print("Radius \(rect.area)")

Ketika kami menjalankan program di atas menggunakan playground, kami mendapatkan hasil sebagai berikut -

Radius of rectangle for 25.0  is now overridden as 3

Pengamat Properti Utama

Ketika properti baru perlu ditambahkan untuk properti yang diwariskan, konsep 'property overriding' diperkenalkan di Swift 4. Ini memberi tahu pengguna ketika nilai properti yang diwarisi diubah. Namun penggantian tidak berlaku untuk properti simpanan yang diwariskan dan properti penghitungan hanya baca yang diwariskan.

class Circle {
   var radius = 12.5
   var area: String {
     return "of rectangle for \(radius) "
   }
}

class Rectangle: Circle {
   var print = 7
   override var area: String {
      return super.area + " is now overridden as \(print)"
   }
}

let rect = Rectangle()
rect.radius = 25.0
rect.print = 3
print("Radius \(rect.area)")

class Square: Rectangle {
   override var radius: Double {
      didSet {
         print = Int(radius/5.0)+1
      }
   }
}

let sq = Square()
sq.radius = 100.0
print("Radius \(sq.area)")

Ketika kami menjalankan program di atas menggunakan playground, kami mendapatkan hasil sebagai berikut -

Radius of rectangle for 25.0  is now overridden as 3
Radius of rectangle for 100.0  is now overridden as 21

Properti Akhir untuk mencegah Overriding

Ketika pengguna tidak ingin orang lain mengakses metode kelas super, properti atau langganan Swift 4 memperkenalkan properti 'final' untuk mencegah penggantian. Setelah properti 'final' dideklarasikan, subskrip tidak akan mengizinkan metode kelas super, properti, dan langganannya untuk diganti. Tidak ada ketentuan untuk memiliki properti 'akhir' dalam 'kelas super'. Ketika properti 'final' dideklarasikan, pengguna dibatasi untuk membuat sub kelas lebih lanjut.

final class Circle {
   final var radius = 12.5
   var area: String {
      return "of rectangle for \(radius) "
   }
}

class Rectangle: Circle {
   var print = 7
   override var area: String {
      return super.area + " is now overridden as \(print)"
   }
}

let rect = Rectangle()
rect.radius = 25.0
rect.print = 3
print("Radius \(rect.area)")

class Square: Rectangle {
   override var radius: Double {
      didSet {
         print = Int(radius/5.0)+1
      }
   }
}

let sq = Square()
sq.radius = 100.0
print("Radius \(sq.area)")

Ketika kami menjalankan program di atas menggunakan playground, kami mendapatkan hasil sebagai berikut -

<stdin>:14:18: error: var overrides a 'final' var
override var area: String {
^
<stdin>:7:9: note: overridden declaration is here
var area: String {
^
<stdin>:12:11: error: inheritance from a final class 'Circle'
class Rectangle: Circle {
^
<stdin>:25:14: error: var overrides a 'final' var
override var radius: Double {
^
<stdin>:6:14: note: overridden declaration is here
final var radius = 12.5

Karena kelas super dideklarasikan sebagai 'final' dan tipe datanya juga dideklarasikan sebagai 'final', program tidak akan mengizinkan untuk membuat subclass lebih lanjut dan itu akan menimbulkan kesalahan.

Post a Comment for "Belajar Swift : Cara Pewarisan di Swift"