DenemeSurusu2.java programına geri dönersek . Bu örnekte programa her yeni türetilmiş tip class eklediğimizde , bu class ın sur() methodunu cağırmak için ayrı bir method yazmak zorundaydık . Bu zor ve hataya açık bir işdir.
Aşağıdaki şemada epey bir türetme yaptık :
Araba.class ından ilk etapda 3 adet class türetiyoruz : YarisArabasi.class , YukArabasi.class , AileArabasi.class ve daha sonradan AileAraba.class ından GencArabasi.class ını türettik . Aslında GencArabasi.class ınıda Araba.class ından türetilmiş diyebiliriz .
Yukarıdaki şemayı koda dökelim :
// Genisleyebilirlik
class Araba
{
private int i = 0 ;
public **** sur() {
System.out.println("Araba sur");
}
public **** dur() {
System.out.println("Araba dur");
}
}
class YarisArabasi extends Araba
{
public **** sur() {
System.out.println("YarisArabasi sur");
}
public **** dur() {
System.out.println("YarisArabasi dur");
}
public **** hizYap() {
System.out.println("Hizzzz Yapp");
}
}
class AileArabasi extends Araba {
public **** sur() {
System.out.println("AileArabasi sur");
}
public **** dur() {
System.out.println("AileArabasi dur");
}
public **** konforOlustur() {
System.out.println(" AileArabasi KonforOlustur( )");
}
}
class YukArabasi extends Araba {
public **** sur() {
System.out.println("YukArabasi sur");
}
public **** dur() {
System.out.println("YukArabasi dur");
}
public **** frenABS() {
System.out.println(" YukArabasi frenABS() ");
}
}
class GencArabasi extends AileArabasi
{
public **** sur() {
System.out.println("GencArabasi sur ");
}
public **** kontrolSistemi() {
System.out.println(" GencArabasi kontrolSistemi() ");
}
}
public class DenemeSurusu3 {
public **** hepsiniSur(Araba[] ar) {
for (int i = 0 ; i < ar.length ; i ++ )
{
ar[ i ].sur();
}
}
public static **** main(String args[]) {
DenemeSurusu3 ds3 = new DenemeSurusu3();
Araba[] ara_ar = new Araba[4] ;
int sayac = 0 ;
// Array e eklerken upcasting oluyor
ara_ar[sayac++] = new AileArabasi();
ara_ar[sayac++] = new YarisArabasi();
ara_ar[sayac++] = new YukArabasi();
ara_ar[sayac++] = new GencArabasi();
ds3.hepsiniSur( ara_ar );
}
} //^
main() methodunun içinde , Araba tipinde bir Array değişkenini tanımladık ve daha sonra Araba sınıfından türeyen diğer sınıfları bu Arrayın içine attık . Array içine atma sırasında herhangi bir hata söz konusu değildir sebebi ise türeyen tiplerin otomotik olarak ana tiplerine dönüşebilmesidir (upcasting , yukari doğru değişim).
Daha sonra bu array in değişkenini hepsiniSur(Araba[] ar) methoduna yolladık ve array içindeki tiplerin sur() methodlarını çagırdık .
Programın çıktısı :
AileArabasi sur
YarisArabasi sur
YukArabasi sur
GencArabasi sur
Array ın içindeki sınıfların hepsinin kendilerine has olan sur() methodları cağrıldı. Polimorfizm in size tam olarak sağlandığı şey budur . Kodunuzu istediğiniz kadar genişletebilirsiniz fakat kodunuzdaki diğer tarafları etkilemez . Polimofizm hakkında şöylede diyebiliriz :” Değişen şeyleri , sabit kalan şeylerden ayırmak“.
Aşağıdaki şemada epey bir türetme yaptık :
Araba.class ından ilk etapda 3 adet class türetiyoruz : YarisArabasi.class , YukArabasi.class , AileArabasi.class ve daha sonradan AileAraba.class ından GencArabasi.class ını türettik . Aslında GencArabasi.class ınıda Araba.class ından türetilmiş diyebiliriz .
Yukarıdaki şemayı koda dökelim :
// Genisleyebilirlik
class Araba
{
private int i = 0 ;
public **** sur() {
System.out.println("Araba sur");
}
public **** dur() {
System.out.println("Araba dur");
}
}
class YarisArabasi extends Araba
{
public **** sur() {
System.out.println("YarisArabasi sur");
}
public **** dur() {
System.out.println("YarisArabasi dur");
}
public **** hizYap() {
System.out.println("Hizzzz Yapp");
}
}
class AileArabasi extends Araba {
public **** sur() {
System.out.println("AileArabasi sur");
}
public **** dur() {
System.out.println("AileArabasi dur");
}
public **** konforOlustur() {
System.out.println(" AileArabasi KonforOlustur( )");
}
}
class YukArabasi extends Araba {
public **** sur() {
System.out.println("YukArabasi sur");
}
public **** dur() {
System.out.println("YukArabasi dur");
}
public **** frenABS() {
System.out.println(" YukArabasi frenABS() ");
}
}
class GencArabasi extends AileArabasi
{
public **** sur() {
System.out.println("GencArabasi sur ");
}
public **** kontrolSistemi() {
System.out.println(" GencArabasi kontrolSistemi() ");
}
}
public class DenemeSurusu3 {
public **** hepsiniSur(Araba[] ar) {
for (int i = 0 ; i < ar.length ; i ++ )
{
ar[ i ].sur();
}
}
public static **** main(String args[]) {
DenemeSurusu3 ds3 = new DenemeSurusu3();
Araba[] ara_ar = new Araba[4] ;
int sayac = 0 ;
// Array e eklerken upcasting oluyor
ara_ar[sayac++] = new AileArabasi();
ara_ar[sayac++] = new YarisArabasi();
ara_ar[sayac++] = new YukArabasi();
ara_ar[sayac++] = new GencArabasi();
ds3.hepsiniSur( ara_ar );
}
} //^
main() methodunun içinde , Araba tipinde bir Array değişkenini tanımladık ve daha sonra Araba sınıfından türeyen diğer sınıfları bu Arrayın içine attık . Array içine atma sırasında herhangi bir hata söz konusu değildir sebebi ise türeyen tiplerin otomotik olarak ana tiplerine dönüşebilmesidir (upcasting , yukari doğru değişim).
Daha sonra bu array in değişkenini hepsiniSur(Araba[] ar) methoduna yolladık ve array içindeki tiplerin sur() methodlarını çagırdık .
Programın çıktısı :
AileArabasi sur
YarisArabasi sur
YukArabasi sur
GencArabasi sur
Array ın içindeki sınıfların hepsinin kendilerine has olan sur() methodları cağrıldı. Polimorfizm in size tam olarak sağlandığı şey budur . Kodunuzu istediğiniz kadar genişletebilirsiniz fakat kodunuzdaki diğer tarafları etkilemez . Polimofizm hakkında şöylede diyebiliriz :” Değişen şeyleri , sabit kalan şeylerden ayırmak“.