Şimdi yükleniyor

Java Abstraction (Soyutlama)

  • Java’da sınıflar veya metodlar abstract (soyut) olarak tanımlanabilir.
  • Peki biz niye buna ihtiyaç duyarız?
  • Bazen biz sınıf yazarken o sınıfın işi nasıl yaptığı ile ilgilenmeyiz ne iş yaptığı ile ilgileniriz. Örneğin cep telefonundan mesaj yazıp gönderdiğimizde telefonun içinde dönen işlemden çok mesajın ulaşıp ulaşmadığı bizi alakadar eder. Mesajın gönderilip yerine ulaşması sürecinde geçen olaylar bizi ilgilendirmez.
  • Aynen bu örnekte olduğu gibi biz bazen soyut sınıflar veya soyut metodlar yazmak isteyebiliriz, bu sınıfın veya içindeki metodun ne yaptığından çok ne iş yaptığı ile ilgileniriz bu yüzden de soyut sınıflar yazarız.
  • Soyut sınıflar abstract veya interface olarak adlandırılabilirler.
  • Abstract olarak tanımlanan sınıf içerisinde abstract metodlar olabileceği gibi, abstract yani soyut olmayan sınıflar da olabilir.

Örnek:

abstract class Çalışan{//soyut sınıf
	public abstract void çalış();//soyut metod
	public void konuş(){//soyut olmayan metod
	System.out.println(«Merhaba ben çalışan»);
		}
}
  • Abstract olarak tanımlanan sınıf abstract olmayan sınıflardan kalıtılabilir ya da abstract olmayan sınıflar abstract olan sınıflardan kalıtılabilir. Her ikisi de mümkündür ancak abstract sınıftan kalıtılan alt sınıfta abstract sınıfta tanımlanmış abstract metodlar kesinlikle bulunmalıdır. Zaten eclipse bize bu hatayı düzeltmek için kısa yol sunar.
abstract class çalışan{
abstract void çalış();
public void konuş(){//soyut olmayan sınıf
System.out.println(«Merhaba ben çalışan»);
}
}

Doğru:

class memur extends çalışan{
public void çalış(){
System.out.println(«Çalışan çalıştı»);
}
public void konuş(){
System.out.println(«Merhaba ben çalışan»);
}
}

Doğru:

class memur extends çalışan{
public abstract void çalış;
public void konuş(){
System.out.println(«Merhaba ben çalışan»);
}
}

 

Aşağıdaki ise yanlış bir kullanım.

abstract class çalışan{
abstract void çalış();
public void konuş(){//soyut olmayan sınıf
System.out.println(«Merhaba ben çalışan»);
}
}

Yanlış:

class memur extends çalışan{
public abstract void çalış(){
System.out.println(«Çalışan çalıştı»);
}
public void konuş(){
System.out.println(«Merhaba ben çalışan»);
}
}

Yanlış:

class memur extends çalışan{
//boş
public void konuş(){
System.out.println(«Merhaba ben çalışan»);
}
}

Önemli hatırlatma

  • Soyut olan sınıfın içerisinde hem soyut hem de soyut olmayan metod bulunabilir.
  • Soyut olmayan sınıfın içerisinde soyut metod bulunamaz.
  • Soyut sınıftan türeyen alt sınıflarda soyut sınıfın soyut metodları bulunmak zorundadır aksi halde hata alırız.

Yorum gönder