Swift - Kalıtım
Birden fazla biçim alma yeteneği, Miras olarak tanımlanır. Genel olarak bir sınıf, yöntemleri, özellikleri ve işlevleri başka bir sınıftan devralabilir. Sınıflar, alt sınıf ve süper sınıfa ayrılabilir.
Sub Class - Bir sınıf başka bir sınıftan özellikleri, yöntemleri ve işlevleri miras aldığında, buna alt sınıf denir
Super Class - Diğer sınıfları kendisinden miras alacak özellikleri, yöntemleri ve işlevleri içeren sınıfa süper sınıf denir
Swift 4 sınıfları, yöntemleri, özellikleri, işlevleri ve geçersiz kılma yöntemlerini çağıran ve bunlara erişen üst sınıf içerir. Ayrıca, özellik gözlemcileri, bir özellik eklemek ve depolanan veya hesaplanan özellik yöntemlerini değiştirmek için de kullanılır.
Temel Sınıf
Başka bir sınıftan yöntemleri, özellikleri veya işlevleri miras almayan bir Sınıf, 'Temel Sınıf' olarak adlandırılır.
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)
Yukarıdaki programı oyun alanını kullanarak çalıştırdığımızda, aşağıdaki sonucu elde ederiz -
Swift 4
98
89
76
StudDetails sınıf adlı sınıf, burada öğrencilerin adını içeren bir temel sınıf olarak tanımlanır ve üç konu işaret1, işaret2 ve işaret3 olarak işaretlenir. 'let' anahtar sözcüğü, temel sınıfın değerini başlatmak için kullanılır ve temel sınıf değeri, 'print' işlevi yardımıyla oyun alanında görüntülenir.
Alt sınıf
Yeni bir sınıfı mevcut bir sınıfa dayandırma eylemi 'Alt Sınıf' olarak tanımlanır. Alt sınıf, temel sınıfının özelliklerini, yöntemlerini ve işlevlerini miras alır. Bir alt sınıf tanımlamak için ':', temel sınıf adından önce kullanılır
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()
Yukarıdaki programı oyun alanını kullanarak çalıştırdığımızda, aşağıdaki sonucu elde ederiz -
Mark1:93, Mark2:89
'StudDetails' sınıfı, öğrenci notlarının beyan edildiği ve alt sınıf 'gösteriminin' markaları süper sınıfından devralmak için kullanıldığı süper sınıf olarak tanımlanır. Alt sınıf, öğrencilerin işaretlerini tanımlar ve öğrencilerin işaretini görüntülemek için print () yöntemini çağırır.
Geçersiz kılma
Süper sınıf örneğine, tür yöntemlerine, örneğe, tür özelliklerine ve alt simge alt sınıfına erişim, geçersiz kılma kavramını sağlar. "override" anahtar sözcüğü, üst sınıfta bildirilen yöntemleri geçersiz kılmak için kullanılır.
Süper Sınıf Yöntemlere, Özelliklere ve Alt Dosyalara Erişim
'super' anahtar sözcüğü, süper sınıfta belirtilen yöntemlere, özelliklere ve aboneliklere erişmek için bir önek olarak kullanılır
Geçersiz kılma | Yöntemlere, özelliklere ve aboneliklere erişim |
Yöntemler | super.somemethod () |
Özellikleri | super.someProperty () |
Abonelikler | süper [someIndex] |
Geçersiz Kılma Yöntemleri
Devralınan örnek ve tür yöntemleri, alt sınıfımızda tanımlanan yöntemlerimiz için 'geçersiz kıl' anahtar sözcüğü ile geçersiz kılınabilir. Burada, print () süper sınıfında belirtilen type özelliğine erişmek için alt sınıfta print () geçersiz kılınır. Ayrıca kriket () süper sınıfının yeni bir örneği 'cricinstance' olarak oluşturulur.
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()
Yukarıdaki programı oyun alanını kullanarak çalıştırdığımızda, aşağıdaki sonucu elde ederiz -
Welcome to Swift Super Class
Welcome to Swift Sub Class
Mülk Geçersiz Kılma
Bu özellik için kendi özel alıcı ve ayarlayıcınızı sağlamak için veya altta yatan özellik değeri değiştiğinde geçersiz kılma özelliğinin gözlemlenmesini sağlamak için özellik gözlemcileri eklemek için miras alınan bir örneği veya sınıf özelliğini geçersiz kılabilirsiniz.
Özellik Getiricileri ve Ayarlayıcıları Geçersiz Kılma
Swift 4, kullanıcının, ister depolanmış ister hesaplanmış bir özellik olsun, miras alınan özelliği geçersiz kılmak için özel alıcı ve ayarlayıcı sağlamasına olanak tanır. Alt sınıf, miras alınan özellik adını ve türünü bilmiyor. Bu nedenle, kullanıcının alt sınıfta, süper sınıfta belirtilen geçersiz kılma özelliğinin adını ve türünü belirtmesi önemlidir.
Bu iki şekilde yapılabilir -
Özelliği geçersiz kılmak için ayarlayıcı tanımlandığında, kullanıcının alıcıyı da tanımlaması gerekir.
Miras alınan özellik alıcıyı değiştirmek istemediğimizde, miras alınan değeri 'super.someProperty' sözdizimi ile süper sınıfa geçirebiliriz.
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)")
Yukarıdaki programı oyun alanını kullanarak çalıştırdığımızda, aşağıdaki sonucu elde ederiz -
Radius of rectangle for 25.0 is now overridden as 3
Öncelikli Mülkiyet Gözlemcileri
Devralınan bir mülk için yeni bir özellik eklenmesi gerektiğinde, Swift 4'te 'özelliği geçersiz kılma' kavramı getirilir. Bu, miras alınan özellik değeri değiştirildiğinde kullanıcıyı bilgilendirir. Ancak, devralınan sabit depolanan özellikler ve miras alınan salt okunur hesaplanan özellikler için geçersiz kılma geçerli değildir.
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)")
Yukarıdaki programı oyun alanını kullanarak çalıştırdığımızda, aşağıdaki sonucu elde ederiz -
Radius of rectangle for 25.0 is now overridden as 3
Radius of rectangle for 100.0 is now overridden as 21
Geçersiz Kılmayı Önlemek için Nihai Özellik
Kullanıcı başkalarının süper sınıf yöntemlerine, özelliklerine veya aboneliklerine erişmesini istemediğinde, Swift 4 geçersiz kılmayı önlemek için 'son' özelliği sunar. 'Final' özelliği bildirildikten sonra, alt simgeler süper sınıf yöntemlerinin, özelliklerinin ve alt simgelerinin geçersiz kılınmasına izin vermez. "Süper sınıf" da "nihai" mülke sahip olma hükmü yoktur. "Nihai" özellik bildirildiğinde, kullanıcı daha fazla alt sınıf oluşturmakla sınırlandırılır.
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)")
Yukarıdaki programı oyun alanını kullanarak çalıştırdığımızda, aşağıdaki sonucu elde ederiz -
<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
Süper sınıf "nihai" olarak ve veri türleri de "nihai" olarak bildirildiğinden, program alt sınıfların daha fazla oluşturulmasına izin vermez ve hata verir.