Merhaba arkadaşlar,
mobilhanem.com üzerinden anlattığımız/yayınladığımız derslerimize Java Nesne Yönelimli Programlama başlığı altında Java Inheritance konusunuyla devam ediyoruz.
Java Inheritance
Java Inheritance temel seviyede kodlama yaparken bile ihtiyaç duyulan bir yapıdır. Bir çok projede farklı sınıflar birbirleriyle aynı değişkenleri veya aynı metotları içerebilirler. Bu gibi durumlarda aynı kodların tekrar tekrar yaratılmasını önlemek için Java’da sınıflar birbirinden türeyebilirler.
Superclass ve Subclass
Sınıfların birbirlerinden türemeleri sonucunda superclass ve subclass kavramları ortaya çıkar. Bir sınıf başka bir sınıftan türüyorsa yani başka bir sınıfın değişkenlerini ve metotlarını miras alıyorsa subclass olarak adlandırılır. Eğer bir sınıftan başka bir sınıf miras alınıyor veya türetiliyorsa o sınıf superclass olarak adlandırılır.
Kısacık bir örnekle superclass ve subclass ‘ın nasıl gözüktüğüne aşağıdaki kod parçasından gözatabiliriz.
public class SuperClassTest {
public int intValue;
public void testMethod() {
}
class SubClassTest extends SuperClassTest {
public void subMethod() {
super.testMethod();
super.intValue;
}
}
}
public class SuperClassTest { public int intValue; public void testMethod() { }
class SubClassTest extends SuperClassTest { public void subMethod() { super.testMethod(); super.intValue; } } } |
Object Sınıfı
Java Inheritance aslında temelde var olan hatta yazılımcıların farkında olmadan kullandıkları bir yapıdır. Java’da kullanılan tüm sınıflar Object sınıfından türetilmiştir. Bir sınıfın tipi bilinmiyorsa bu sınıf new operatörüyle Object sınıfına eşitlenebilir. Bu bir problem yaratmayacaktır, çünkü temelde Object sınıfından türemektedir. Tüm sınıflar Object sınıfından türedikleri için de Object sınıfı içindeki değişken ve metotları miras alırlar.
public class ObjectClassTest {
public ObjectClassTest() {
super();
}
@Override
public int hashCode() {
return super.hashCode();
}
@Override
public boolean equals(Object obj) {
return super.equals(obj);
}
@Override
protected Object clone() throws CloneNotSupportedException {
return super.clone();
}
@Override
public String toString() {
return super.toString();
}
@Override
protected void finalize() throws Throwable {
super.finalize();
}
}
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 |
public class ObjectClassTest { public ObjectClassTest() { super(); }
@Override public int hashCode() { return super.hashCode(); }
@Override public boolean equals(Object obj) { return super.equals(obj); }
@Override protected Object clone() throws CloneNotSupportedException { return super.clone(); }
@Override public String toString() { return super.toString(); }
@Override protected void finalize() throws Throwable { super.finalize(); } } |
Yukarıdaki örnekte görüldüğü gibi oluşturulan sınıf Object sınıfındaki tüm metotları miras almıştır. Object sınıfı tüm sınıfların superclass ‘ı diyebiliriz.
Superclass ve subclass ın daha iyi anlaşılması için aşağıdaki örneği inceleyelim.
public class Person {
private int id;
private String name;
private String surname;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSurname() {
return surname;
}
public void setSurname(String surname) {
this.surname = surname;
}
}
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 |
public class Person {
private int id; private String name; private String surname;
public int getId() { return id; }
public void setId(int id) { this.id = id; }
public String getName() { return name; }
public void setName(String name) { this.name = name; }
public String getSurname() { return surname; }
public void setSurname(String surname) { this.surname = surname; } } |
Person sınıfı kişilerin ad ve soyad gibi özel bilgilerini temsil etmektedir.
public class Employee extends Person {
private String jobtitle;
public String getJobtitle() {
return jobtitle;
}
public void setJobtitle(String jobtitle) {
this.jobtitle = jobtitle;
}
}
public class Employee extends Person {
private String jobtitle;
public String getJobtitle() { return jobtitle; }
public void setJobtitle(String jobtitle) { this.jobtitle = jobtitle; } } |
Employee sınıfı ise işyerine ait iş ünvan bilgisini tutmaktadır. İş ünvanı ile birlikte ad ve soyad gibi kişi,sel bilgileri Person sınıfının yanında Employee sınıfı içersinde de tutmak yerine Person sınıfı superclass, Employee sınıfı ise Person sınıfını miras alarak subclass görevi görmektedir.
Teorik olarak;
- Subclass, paket yapısı farketmeksizin tüm protected ve public üyeleri superclass’tan miras alabilir.
- Miras alınan alanlar sınıf içerisindeki diğer üyelerin kullanıldığı gibi direk olarak kullanılabilirler.
- Superclass içerisindeki bir değişken ile aynı isimde bir değişken subclass içerisinde üretildiğinde bu olay hiding(gizleme) olarak adlandırılır. (önerilmez)
- Superclass içerisindeki bir metot ile aynı isimde bir metot subclass içerisinde üretildiğinde bu olay overriding olarak adlandırılır.
- Superclass içerisindeki static bir metot ile aynı isimde bir static metot subclass içerisinde üretildiğinde bu olay hiding olarak adlandırılır. (önerilmez)
Sonuç
Java Inheritance yapısından faydalanılarak kod tekrarının önlendiği, temiz kodlar yazılabilir. Büyük projelerde bir çok sınıfta kullanılan metotta bir dğeişiklik yapıldığında tek bir yerde değişikliği uygulama çoğu zaman yeterli olacaktır. Bu şekilde Java’da önem arzeden bakımı kolay, esnek ve geliştirmeye ve değiştirmeye açık kodlar yazmak daha kolay hale gelecektir.
Konuyla ilgili yorumlarınızı konu altından yapabilirsiniz, ayrıca sorularınızı Mobilhanem Soru&Cevap bölümünden sorabilirsiniz.
Tüm Java Dersleri için tıklayınız..
96