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 tanmlanan noktaref e aktaralm
noktaref=d;
g.drawString("Daire(noktaref uzerinden) :"+noktaref.toString(),25,7 0);
//noktaref nesnesini daireref degiskenine aktaralm
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.
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 tanmlanan noktaref e aktaralm
noktaref=d;
g.drawString("Daire(noktaref uzerinden) :"+noktaref.toString(),25,7 0);
//noktaref nesnesini daireref degiskenine aktaralm
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.