Java’da kalıtım (Inheritance), kavramını miras alma gibi düşünebiliriz. Günlük yaşamımızdan, tıp literatüründen örnek vermemiz gerekirse kalıtım; yaşamımızdan anladığımız şekille, fiziksel, psikolojik, ve çeşitli genetik özelliklerin anne ve baba tarafından çocuklara geçmesidir. Java’da kalıtım, var olan sınıflardan yeni sınıflar üretmemizi sağlayan OOP (nesne yönelimli programlama)‘nin temel özelliklerinden biridir.
Java’da Kalıtım Kavramları
- Super Class (Süper Sınıf): Özellikleri, metotları, işlemleri miras alınan sınıftır. Süper sınıf üst sınıf olarak da bilinir.
- Sub Class (Alt Sınıf): Süper sınıfı miras alan sınıftır Sub class. Sub class ile kendi alanına metotlar ve özellikler ekleyebilir.
Java’da Kalıtımın Avantajları
- Kalıtım, yazmış olduğumuz kodun yeniden kullanılabilirliğini sağlar. Bununla birlikte zaman ve emek tasarrufu sağlar.
- Kalıtım, anlaşılması kolay bir model yapısını sağlar.
- Kalıtım kavramıyla, kodlarımızı değiştirmek istediğimizde daha esnek bir kullanım kolaylığı sağlar.
Kalıtımın Genel Kullanım Yapısı:
1 2 3 4 5 6 7 8 9 | public class Arac { } public class Araba extends Arac { } |
Yapmış olduğumuz bu tanımlamada Araba sınıfındaki elemanlar, Arac sınıfının içerisindeki elemanlarını miras almış oluyor.
Örneklerimize geçelim ve kalıtım konumuzu pekiştirelim.
1. Örnek
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | public class Arac //arac sınıfımızı oluşturduk { public void ilerle () //bir komut verdik. { System.out.println("Araç ilerliyor"); } } class araba extends Arac // <strong>extends</strong> anahtar kelimemiz ile miras alma olayını gerçekleştirdik. { public static void main(String[] args) { { araba gaz = new araba (); gaz.ilerle(); //bu sınıfımız artık ilerle metoduna sahip oldu. } } } |
Ekran Çıktısı
1 | Araç ilerliyor |
Yapmış olduğumuz bu örnekte Arac sınıfımızı oluşturduk ve içerisine bir metot girdik. Sonrasında ise araba sınıfımızı oluşturduk ve extends anahtar kelimemiz ile miras alma işlevini gerçekleştirdik. gaz adında bir metot oluşturduk ve gaz.ilerle komutu ile Arac sınıfındaki metoda sahip oldu.
2. Örnek
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 | class Cihaz { //ana sınıfımıza metot ve özelliklerimizi giriyoruz. String mesaj; String isim; public void gonder() { System.out.println("mesajınız gonderildi..."); } } //extends anahtar kelimesi ile cihaz sınıfından miras alıyoruz class telefon extends Cihaz { //sub class'a (alt sınıf) yeni metot giriyoruz. public void goruntu() { System.out.println("Benim adım " + isim); System.out.println(mesaj); } } class Main { public static void main(String[] args) { Scanner scanner = new Scanner (System.in); telefon tel = new telefon();//sub class (alt sınıf)'a ulaşmak için yeni bir nesne oluşturduk System.out.println("İsim giriniz."); String y = scanner.nextLine(); //super class (süper sınıf) ulaşmak için bağlantı kuruyoruz. tel.mesaj = "Yarın cs go girek."; tel.isim = y; tel.goruntu(); //metotları çağırıyoruz tel.gonder(); } } |
Ekran Çıktısı
1 2 3 4 5 | İsim giriniz. Mert Benim adım Mert Yarın cs go girek. mesajınız gonderildi... |
Yapmış olduğumu 2. örnekte Cihaz sınıfımızı oluşturduk ve içerisine metot ve gerekli özelliklerimizi tanımladık. Sonrasında ise telefon sınıfımızı oluşturduk. Bu sınıfımız bizim sub class (alt sınıf)‘ımız oluyor. main sınıfımızda ise gerekli olan işlemlerimizi yaptık ve bağlantılar sağladık.
Metot Overriding
Bir sınıftan miras almak istediğimizde, miras almak istediğimiz sınıfın içerisindeki metot veya özelliklerin bir kısmını kullanmak istemeyebiliriz. Bu durumda silme veya değiştirme işlemini overriding metodumuz ile gerçekleştirebiliriz. Örneklere geçelim.
1. Örnek
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 | class Cihaz { //ana sınıfımıza metot ve özelliklerimizi giriyoruz. String mesaj; String isim; public void gonder() { System.out.println("mesajınız gonderildi..."); } } //extends anahtar kelimesi ile cihaz sınıfından miras alıyoruz class telefon extends Cihaz { public void gonder () //metot override edildi. { System.out.println("Mesajınız gönderilemedi."); } //sub class'a (alt sınıf) yeni metot giriyoruz. public void goruntu() { System.out.println("Benim adım " + isim); System.out.println(mesaj); } } class Main { public static void main(String[] args) { Scanner scanner = new Scanner (System.in); telefon tel = new telefon();//sub class (alt sınıf)'a ulaşmak için yeni bir nesne oluşturduk System.out.println("İsim giriniz."); String y = scanner.nextLine(); //super class (süper sınıf) ulaşmak için bağlantı kuruyoruz. tel.mesaj = "Yarın cs go girek."; tel.isim = y; tel.goruntu(); //metotları çağırıyoruz tel.gonder(); } } |
Ekran Çıktısı
1 2 3 4 5 | İsim giriniz. mert Benim adım mert Yarın cs go girek. Mesajınız gönderilemedi. |
Yukarıda yapmış olduğumuz örneğin aynısını yaptık yine, iki tane gonder metodumuz mevcut. telefon sınıfımız içerisine aynı isimde yeni bir gonder metodu oluştururak Cihaz sınıfındaki gonder metodunu geçersiz kıldık.
2. Örnek
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | public class Isım //ısım sınıfını oluşturduk. { //içeriye metot ve özellikler tanımladık. String isim = "eysan"; int no = 198234; int tel_no = 5329873; public void metot() { System.out.println("İsim = "+isim); System.out.println("Numara = " + no); } } //Isım sınıfından miras alma işlemi yapıldı class override extends Isım { public void metot() //metot tanımlandı override edildi. { System.out.println("İsim = " + isim); System.out.println("Numara = " + no); System.out.println("Telefon numara = " + tel_no); } } class uygula //uygula sınıfını oluşturduk { public static void main(String[] args) { override a = new override ();//yeni bir nesne oluşturduk. a.metot();//hangi metodun yazdırılması gerektigini belirttik. } } |
Ekran Çıktısı
1 2 3 | İsim = eysan Numara = 198234 Telefon numara = 5329873 |
Yapmış olduğumuz 2. örnekte Isım sınıfını oluşturduk ve içerisine metot ve özelliklerimizi tanımladık. override sınıfımızı oluşturduk ve extends anahtar kelimesiyle Isım sınıfından miras alma olayını gerçekleştirdik. override sınıfımızın içerisine metot tanımladık ve override işlemimizin yapılmasını sağladık.