-1
abstract class GeometrikSekil{
abstract fun alanHesapla():Int
}
class Kare(var kenarUzunlugu:Int) : GeometrikSekil(){
override fun alanHesapla(): Int {
return kenarUzunlugu*kenarUzunlugu
}
}
class Dikdortgen(var en:Int, var boy:Int) : GeometrikSekil(){
override fun alanHesapla(): Int {
return en*boy
}
}
fun main(args: Array) {
var kare1=Kare(6)
var kare2=Kare(8)
var buyukKare=alanKarsilastir(kare1, kare2)
println("Büyük karenin alanı ${buyukKare. alanHesapla()}")
var dikdortgen1=Dikdortgen(6, 8)
var dikdortgen2=Dikdortgen(8,9)
var buyukDikdortgen=alanKarsilastir(dikdortgen1, dikdortgen2)
println("Büyük dikdortgenin alanı ${buyukDikdortgen. alanHesapla()}")
var gs1:GeometrikSekil=Kare(8)
var gs2:GeometrikSekil=Kare(14)
var buyukGS= alanKarsilastir(gs1, gs2)
println("Büyük olan şekil : ${buyukGS. alanHesapla()}" )
var sekil1=Dikdortgen(3,5)
var sekil2=Dikdortgen(7,9)
println("Büyük alan : " + genericAlanKarsilastirFun(sekil1, sekil2).alanHesapla())
}
/* -> Belli bir amaca hizmet eden farklı türdeki verileri tutmak için kullanılır.Örneğin genericAlanKarsilastirFun
metodunun aldığı parametre tipi Genel değil String, Integer ve benzeri tek bir tip olsaydı, biz farklı bir veri tipiyle
çalışmak için yaptığı iş aynı olan fakat tuttuğu veri tipi farklı olan bir metod daha tanımlamak zorunda kalacaktık. field ifadesi üstteki değişken anldıbına gelir.