Abstract Class ve Methodlar

CorsaiR

Emektar
27 Ara 2005
1,228
18
Çekirdekten
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 .

sema5.gif


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 .
 
Ü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.