Benim uygulamam su sekilde Insan diye bir abstract sinifim var ve bu sinifta insanlarin ortak olan ve farkli olan tum niteliklerini olusturdugum bir sinif
public abstract class Insan {
public abstract int getBoy() ;
public abstract String getGozRengi();
public abstract int getKilo();
public abstract int getYas();
public void yemek(){
System.out.println("Tum Insanlar yemek yer");
}
public void sinirlenmek(){
System.out.println("Tum Insanlar Sinirlenir yer");
}
public void gulmek(){
System.out.println("Tum Insanlar Guler yer");
}
}
public class Abdulkadir extends Insan{
@Override
public int getBoy() {
return 180;
}
@Override
public String getGozRengi() {
return "Ela";
}
@Override
public int getKilo() {
return 73;
}
@Override
public int getYas() {
return 27;
}
}
public class Ertugrul extends Insan{
@Override
public int getBoy() {
return 182;
}
@Override
public String getGozRengi() {
return "Kahverengi";
}
@Override
public int getKilo() {
return 70;
}
@Override
public int getYas() {
return 26;
}
}
public class TestMain {
public static void main(String args[]){
Abdulkadir a = new Abdulkadir();
a.gulmek();
a.sinirlenmek();
a.yemek();
System.out.println("BOY : "+a.getBoy());
System.out.println("KILO : "+a.getKilo());
System.out.println("YAZ RENGI : "+a.getGozRengi());
}
}
//CONSOLE OUTPUT (Ekranda gosterilen veriler)
Tum Insanlar Guler yer
Tum Insanlar Sinirlenir yer
Tum Insanlar yemek yer
BOY : 180
KILO : 73
YAZ RENGI : Ela
Yukaridaki uygulamayi inceledigimizde Insan Abstract sinifinin hem bir inteface gibi soyut siniflarinin var oldugunu hemde normal sinif gibi ici dolu methodlarinin oldugunu goruyoruz. ve biz bu insan Abstract sinifini yaparken su mantiktanda yararlandigimizada dikkat etmissinizdir kalitim konusundaki gibi insana ait olan ortak ozelikleri bir araya toplayarak her seferinde tekrar tekrar yazmak ve kalitimin gucunden yararlanmak gibi bir durumda dikkatinizi cekmistir ve ayrica icinde soyut methodlarda var yani ben diyorumki bu insan sinifini extends edecek sinifa sen su methodlarida kullanmalisin yani tipki interfacede oldugu gibi Simdi gelelim Abstract siniflarda dikkat edilmesi gereken hususlara
- . Bir sınıf soyut olucaksa, abstract anahtar sözüğü ile tanımlanır.public abstract class Insan
- Abstract bir sınıftan herhangibir nesne örneği türetilemez. Insan i = new Insan() seklinde bir nesne ornegi olusturamayiz.
- Abstract bir sinif abstract metod tanımlamarını içermesidir. public abstract int getBoy() ;
- Bu Abstract sınıftan türeyen sınıflarda abstract methodlar mutlaka ama mutlaka override edilmelidir.
- Abstract siniflar olustururken tek baslarina bir manalari yok anacak kalitim yolu ile kullanildigini soylemistik iste eyer bir yerde kalitim varsa o zaman polimorfizimden bahsetmek mumkun buda yine abstrac sinifini bir gucudur
public static void main(String args[]){
Abdulkadir a = new Abdulkadir();
testPoli(a);
System.out.println("---------------------------------------------------");
Ertugrul e = new Ertugrul();
testPoli(e);
}
public static void testPoli(Insan i){
i.gulmek();
i.sinirlenmek();
i.yemek();
System.out.println("BOY : "+i.getBoy());
System.out.println("KILO : "+i.getKilo());
System.out.println("YAZ RENGI : "+i.getGozRengi());
}
}
//CONSOLE OUTPUT
Tum Insanlar Guler yer
Tum Insanlar Sinirlenir yer
Tum Insanlar yemek yer
BOY : 180
KILO : 73
YAZ RENGI : Ela
---------------------------------------------------
Tum Insanlar Guler yer
Tum Insanlar Sinirlenir yer
Tum Insanlar yemek yer
BOY : 182
KILO : 70
YAZ RENGI : Kahverengi
- Abstract sınıf tanımlamalarında dikkat çeken bir diğer unsurda, bu sınıfın abstract metodlar dışındada normal sınıfların sahip olduğu üyelere sahip olabilmesidir. Normal metodlar veya alanlar. Normal bir metodu türeyen sınıflara ait nesneler üzerinden kalıtımın bir gereği olarak çağırabiliriz.
- Kalıtımın doğası gereği ilk olarak abstract sınıf içerisindeki yapıcı metodu işleyeceğinide biliyoruz burada sunu demek istiyorum
public Insan() {
System.out.println("Ben Insan sinifin Yapicisiyim");
}
public Abdulkadir() {
System.out.println("Ben Abdulkadir sinifinin Yapilandiricisiyim.....");
}
Simdi bu dedigimiz olayin nasil calistigina bakalim
public class TestMain {
public static void main(String args[]){
Abdulkadir a = new Abdulkadir();
System.out.println("KILO : "+a.getKilo());
}
}
//CONSOLE OUTPUT
Ben Insan sinifin Yapicisiyim
Ben Abdulkadir sinifinin Yapilandiricisiyim.....
KILO : 73
- Abstract sınıftan başka abstract sınıflar türetilmesi sirasinda dikkat edilecek hususlar
public Canlilar() {
System.out.println("Canlilar sinifinin Yapilandiricisi......");
}
public abstract void yasamak();
public abstract void olmek();
public void test(){
System.out.println("Canlilar sinifinin test methodu");
}
}
public abstract class Insan extends Canlilar{
public Insan() {
System.out.println("Ben Insan sinifin Yapicisiyim");
}
public abstract int getBoy() ;
public abstract String getGozRengi();
public abstract int getKilo();
public abstract int getYas();
public void yemek(){
System.out.println("Tum Insanlar yemek yer");
}
public void sinirlenmek(){
System.out.println("Tum Insanlar Sinirlenir yer");
}
public void gulmek(){
System.out.println("Tum Insanlar Guler yer");
}
}
Gorulduyu gibi bir abstract sinifi baska bir abstract siniftan turetmek icin oncelikle extends kelimesinden yaralalndik yani ayni normal siniflarda oldugu gibi. Normal bir sinifa abstract sinifi extends ettigimizde abstract methodlari override etmek gerekliydi ama yukardaki uygulamada gorulduyu gibi bu sekilde bir sey soz konusu degil.
Eyer biz Insan abstract sinifini Abdulkadir sinifina extends edersek o zaman hem Canlilar'daki hemde Insan'daki abstract methodlari override etmemiz gerekir
- Simdide bir Interface sinifini Abstract sinifina implements sirasinda nelerin olduguna bakalim:
void yasamak();
void olmek();
}
public abstract class Insan implements CanlilarIn{
public Insan() {
System.out.println("Ben Insan sinifin Yapicisiyim");
}
public abstract int getBoy() ;
public abstract String getGozRengi();
public abstract int getKilo();
public abstract int getYas();
public void yemek(){
System.out.println("Tum Insanlar yemek yer");
}
public void sinirlenmek(){
System.out.println("Tum Insanlar Sinirlenir yer");
}
public void gulmek(){
System.out.println("Tum Insanlar Guler yer");
}
}
public class Abdulkadir extends Insan{
public Abdulkadir() {
System.out.println("Ben Abdulkadir sinifinin Yapilandiricisiyim.....");
}
@Override
public int getBoy() {
return 180;
}
@Override
public String getGozRengi() {
return "Ela";
}
@Override
public int getKilo() {
return 73;
}
@Override
public int getYas() {
return 27;
}
public void yasamak() {
throw new UnsupportedOperationException("Not supported yet.");
}
public void olmek() {
throw new UnsupportedOperationException("Not supported yet.");
}
}
Gorulduyu gibi Insan abstract sinifa CanlilarIn inteface sinifi implements olunca methodlarini Override edilmiyor ama Abdulkadir sinifina Insan abstract sinifi extends olununca CanlilarIn ile Insan sinifindaki soyut methodlar Override olunuyor
No comments:
Post a Comment