Nesneye yönelik programlamanın önemli özelliklerinden biri de çok biçimliliktir. Çok biçimlilik için çeşitli ve farklı tanımlar olmakla birlikte biz burada pratik kullanım açısından da çok faydalı gördüğümüz iki tanımı örneklerle birlikte vereceğiz:
I. Çok biçimlilik, bir sınıf içinde aynı isimde fakat farklı içerikte metotlar kullanabilme özelliğidir.
ÖRNEK:
class A{
func top(a:Int)->Int{
return a * a}
func top(a:Double)->Double{
return a * a * a}
func top(a:String)->String{
return a + a }
}
var x=A()
print( x.top(a:5))
print( x.top(a:5.5))
print( x.top(a:"55.89"))
Programın çıktısı ise aşağıdadır:
25
166.375
55.8955.89
Yukarıdaki örnekte, top adlı metot 3 farklı şekilde oluşturulmuştur:
1. Int türü bir sayı alıp bunun karesini gönderen
2. Double türü bir sayı alıp bunun kübünü gönderen
3. String türü bir değer alıp bunun bir kopyasını kendisine ekleyen
II. Çok biçimlilik, aynı metodun değişik sınıflar içinde yer alabilme imkanıdır.
ÖRNEK:
class A{
func fakt(n:Int)->Int
{var f=1
for i in 1...n
{f=f*i}
return f
}
}
class B{
func fakt(n:Int)->Int
{var f=1
for i in 1...n
{f=f*i}
return f
}
}
let aa=A()
let bb=B()
let n=5
print("\(n)!=\(aa.fakt(n:n))")
print("\(n)!=\(bb.fakt(n:n))")
Programın çıktısı ise aşağıdadır:
5!=120
5!=120
Yukarıdaki örnekte ise A ve B gibi iki farklı sınıf içinde fakt adlı metot aynı içerikle oluşturulmuş ve çağrılmıştır.