Kalıtım yoluyla alt sınıfa bağlanmış üst sınıf referansı üzerinden alt sınıfı çağırma

Muratkoc61

Üye
30 Eyl 2008
128
4
Trabzon
Yukarıda nokta ve daire sınıflarını tanımlamıştık. Baska bir sınıftan kalıtım yoluyla türeyen sınıfın(dairenin noktadan kalıtım yoluyla türemesi gibi), üst sınıfın adresi(tanımı) üzerinden programın içinde aktarımı mümkündür.








import java.awt.Graphics;



import java.applet.Applet;







public class noktatesti extends Applet



{



private nokta noktaref,n;



private daire daireref,d;



public **** init()



{



n=new nokta(30,50);



d=new daire(2.7,120,89);



}



public **** paint(Graphics g)



{



//once noktamızı ve dairemizi yazdıralım



g.drawString("Nokta n : "+n.toString(),25,25);



g.drawString("Daire d : "+d.toString(),25,40);



//c dairesinin adresini nokta olarak tanmlanan noktaref e aktaralm



noktaref=d;



g.drawString("Daire(noktaref uzerinden) :"+noktaref.toString(),25,7 0);



//noktaref nesnesini daireref degiskenine aktaralm



daireref=(daire)noktaref;



g.drawString("Daire(daireref uzerinden) :"+daireref.toString(),25,8 5);



g.drawString("Dairenin alani(daireref uzerinden) :"+daireref.alan(),25,100);



}



}




Şekil 3.8.1 noktatesti.java sınıfında üst sınıf üzerinden adres referansı kullanımı







Şekil 3.8.1 de görülen noktatesti.java sınıfında n nokta sınıfı nesnesi ve noktaref noktasinifi nesnesi ve d ve daireref daire sinifi nesneleri tanımlanmiştır. İnit metodunda p ve c nesnelerinin adresleri kurucu metodu new deyimiyle taşıyarak tanımlanmiştir. Dahasonra noktaref=d; deimiyle aslında daire sınıfından olan d nesnesi nokta sınıfından tanımlanan noktaref nesnesinin adresine yüklenmiştir. Programda da görüldüğü gibi noktaref üzerinden daireyi kullanmak mümkündür çünki nokta dairenin kalıtın yoluyla üst sınıfıdır. Aynı zamanda cast işlemcisi (daire) terimini kullanarak noktaref’i daireref’e aktarmak da mümkün olmuştur. Bu aktarma nokta dairenin super sınıfı olmasa başarılamazdı. Bazen sadece bu süper sınıf aktarımını saglamak amacıyla sınıf hiyerarşisinin en tepesine aslında belli bir görevi olmıyan abstract sınıflar yerleştirilir. Bu sınıfın alt sınıfları olarak tanımlanan tüm sınıflar bu sınıf adresinden yararlanılarak aktarılabilir. Abstract sınıfların tanımında abstract sözcüğü kullanılır. Abstract tür metodların içinde metodların sadece başlıkları verilip tanımları yapılmıyabilir. (metodun ana gövdesi tanımlanmıyabilir). Abstract super sınıfının kullanılmasına şöyle bir örnek verebiliriz : sekil isimli bir abstract sınıfın alt sınıfları olarak daire,üçgen,dikdörtgen ve kare sınıflarını olusturduğumuzu ve bu sınıfların herbirinin kendi şeklini çizecek ciz metodunu içerdiğini düşünelim. Programı yazarken abstract sınıf sekilde de alan metodu tanımı yaparız. Ve sekil sınıfından bir nesne tanımlarız. Program calışırken sekil üzerinden istediğimiz alt şeklin çizimi dinamik olarak her biri için atrı adres tanımlamadan mümkün olur. Aynı şekilde bir nümerik analiz programı yazarken, örneğin her değişik fonksiyon için ayrı ayrı integral metodu yazma yerine abstract tür bir fonksiyon için integral programını yazar ve gerçek foksiyonumuzu tanımladığımız sınıfı bu abstract sınıfın alt sınıfı olarak tanımlarız.



Bu kavramı daha sonraki bölümlerimizde daha geniş örneklerle açıklamaya çalışacağız.
 
Üst

Turkhackteam.org internet sitesi 5651 sayılı kanun’un 2. maddesinin 1. fıkrasının m) bendi ile aynı kanunun 5. maddesi kapsamında "Yer Sağlayıcı" konumundadır. İçerikler ön onay olmaksızın tamamen kullanıcılar tarafından oluşturulmaktadır. Turkhackteam.org; Yer sağlayıcı olarak, kullanıcılar tarafından oluşturulan içeriği ya da hukuka aykırı paylaşımı kontrol etmekle ya da araştırmakla yükümlü değildir. Türkhackteam saldırı timleri Türk sitelerine hiçbir zararlı faaliyette bulunmaz. Türkhackteam üyelerinin yaptığı bireysel hack faaliyetlerinden Türkhackteam sorumlu değildir. Sitelerinize Türkhackteam ismi kullanılarak hack faaliyetinde bulunulursa, site-sunucu erişim loglarından bu faaliyeti gerçekleştiren ip adresini tespit edip diğer kanıtlarla birlikte savcılığa suç duyurusunda bulununuz.