PVP SERVERLER FORUM
Would you like to react to this message? Create an account in a few clicks or log in to continue.
PVP SERVERLER FORUM

You are not connected. Please login or register

Abstract Class ve Methodlar

Go down  Message [Page 1 of 1]

1Abstract Class ve Methodlar Empty Abstract Class ve Methodlar Sun Mar 28, 2010 10:03 am

Chun Chu

Chun Chu
Vip Üye
Vip Üye

Abstract ın türkce karşılığı “soyut” demektir , pekii neden soyut class lara ihtiyaç duyarız ? Abstract ın türkce karşılığı “soyut” demektir , pekii neden soyut class lara ihtiyaç duyarız ? DenemeSurusu3.java örneğini incelersek ; ana class olan Araba.class ının bir birleştirici rol oynadığı görülür . Yani kendinden türeyen tipler için bir ortak arayüzler(methodlar) sağlar . Olaylara bu açıdan bakarsak ana class lara “kukla “ diyebiliriz ve bu ana class ın methodlarının çağrılması bazı durumlarda hata bile oluşturabilir. İstenilen aslında şudur , ana class oluşturmak ve sonra bu ana class dan türemiş class lar türetmek ve türemiş class lara kendilerine has davranışları oluşturmak , override ile .

“Kukla“ class diye tabir edebileceğimiz class ları java da Abstract class olarak tanımlarız . Bir class ın Abstract olabilmesi için metodlarından en az birinin abstract method olması gerekir.

abstract **** sur();

Abstract methodlar kesinlikle türeyen class larda override edilmek zorundadır.
Eğer override edilmez ise compile-time da hata yerseniz .

Abstract Class ve Methodlar Sema5

Yukarıdaki şemayı koda dökelim :

// abstract class ve methodlar
abstract class Araba
{
public abstract **** 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 DenemeSurusu4 {


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();
// ara_ar[sayac++] = new Araba(); !! hata !!
// abstract class lar yaratilamazlar .
ds3.hepsiniSur( ara_ar );
}
}//^



DenemeSurusu3.java ile bu örnek arasındaki tek fark Araba.class ının abstract hale getirilmesi . sur() metodu artik abstract bir method ve Araba tipinden türeyen her yeni tip sur() metodunu override (ezmek) zorundadır.

Araba.class ındaki dur() methodu eski haline korumaktadır ve Araba tipinden dan türeyen diğer tiplerler bu methodu KESİNLİKLE ezmek zorunda değiller ama isterlerse ezebilirler.Buradan şu sonucu çıkarabiliriz ; Abstract class ların içinde en az bir tane abstract method bulunmak zorundadır ve bir class ın abstact olması bu class içersine fonksiyonel method bulunmayacağı anlamına gelmez .

Son olarak da dikkat çekmek istediğim konu , abstract class ların new anahtar kelimesi ile yaratılamamaları.Abstract class lar kesinlikle en az bir tane abstract method (fonkisiyonelitesiz method ) içerdiklerinden dolayı mantıklı bir engelleme .

Back to top  Message [Page 1 of 1]

Permissions in this forum:
You cannot reply to topics in this forum