Java ders 6

merlins

Üye
24 Mar 2019
172
0
Merhabalar bugün 6. Ders ile karşınızdayım. Dersimizde Kalıtım ve polimorfizm (Inheritance and Polymorphism) işleyeceğiz.​

Haydi başlayalım;


Çevreleri, dikdörtgenleri ve üçgenleri modellemek için sınıflar tanımlayacağınızı varsayalım. Bu sınıfların birçok ortak özelliği vardır. Fazlalıktan kaçınmak için bu sınıfları tasarlamanın en iyi yolu nedir? Cevap kalıtım kullanmaktır.​

Derste öğreneceklerimiz;

  • Üst sınıftan kalıtım yoluyla bir alt sınıf tanımlamak.
  • Super anahtar sözcüğünü kullanarak üst sınıf yapıcılarını ve yöntemlerini çağırmak.
  • Alt sınıftaki örnek yöntemlerini geçersiz kılmak için.
  • Geçersiz kılma ve aşırı yükleme arasındaki farkları ayırt etmek.
  • Polimorfizmi ve dinamik bağlamayı keşfetmek.
  • Dökümü açıklamak ve neden açık downcastingin gerekli olduğunu açıklamak.
  • Bir ArrayList içindeki nesneleri saklamak, almak ve değiştirmek için.

Superclasses and Subclasses​


Yapıcı, sınıfın bir örneğini oluşturmak için kullanılır. Özelliklerden ve yöntemlerden farklı olarak, üst sınıfın yapıcıları alt sınıfta miras alınmaz. Süper anahtar kelimesini kullanarak yalnızca alt sınıfların yapıcılarından çağrılabilirler. Super anahtar kelimesi açıkça kullanılmazsa, üst sınıfın arg-yapıcısı otomatik olarak çağrılır.
Bir yapıcı bir Aşırı yüklü yapıcısı veya üst sınıfının yapıcısı çağırmak olabilir. Hiçbiri açıkça çağrılmazsa, derleyici yapıcıdaki ilk ifade olarak super () değerini koyar.​
Örneğin,​


Soldaki kutucuklar ile sağdakiler ok işaretine göre eşit yapılardır.


Süper Anahtar Kelimeyi Kullanımı:

Super anahtar kelimesi, super öğesinin göründüğü sınıfın üst sınıfını ifade eder. Bu anahtar kelime iki şekilde kullanılabilir:
  • superclass yapıcı çağırmak için
  • superclass methodunu çağırmak için

superclass yapıcısını çağırmak için süper anahtar sözcüğünü kullanmanız gerekir. superclass yapıcısının adını bir alt sınıfta çağırmak sözdizimi hatasına neden olur. Java, super anahtar sözcüğünü kullanan ifadenin önce yapıcıda(constructor) görünmesini gerektirir.

Constructor Chaining (Oluşturucu Zinciri)

Bir sınıf örneği oluşturmak, miras zinciri boyunca tüm üst sınıfların yapıcılarını çağırır. Buna yapıcı zincirleme denir.

Örnek resim;


Subclass Tanımlama;

Bir alt sınıf, bir üst sınıftan miras alır. Ayrıca şunları da yapabilirsiniz:


  • Yeni mülk ekle
  • Yeni yöntemler ekle

Superclass Methodlarını çağırma;

Circle sınıfındaki printCircle () yöntemini aşağıdaki gibi yeniden yazabilirsiniz:


Üst sınıf yöntemlerini geçersiz kılma(Override the methods of the superclass):​

Bir alt sınıf, yöntemleri bir üst sınıftan devralır. Bazen alt sınıfın, üst sınıfta tanımlanan bir yöntemin uygulanmasını değiştirmesi gerekebilir. Buna yöntem geçersiz kılma denir.

Note:

Bir örnek yöntemi yalnızca erişilebilir durumdaysa geçersiz kılınabilir. Bu nedenle, kendi sınıfının dışında erişilemediğinden özel bir yöntem geçersiz kılınamaz. Bir alt sınıfta tanımlanan bir yöntem üst sınıfında özelse, iki yöntem tamamen ilişkisizdir.
Bir örnek yöntemi gibi, statik bir yöntem miras alınabilir. Ancak, statik bir yöntem geçersiz kılınamaz. Üst sınıfta tanımlanan statik bir yöntem bir alt sınıfta yeniden tanımlanırsa, üst sınıfta tanımlanan yöntem gizlenir.



Nesne Sınıfı ve Yöntemleri​

Java'daki her sınıf, java.lang.Object sınıfından alınmıştır. Bir sınıf tanımlandığında herhangi bir miras belirtilmezse, sınıfın üst sınıfı Object olur.




Mirası extends şeklinde belirtiyoruz classımızın yanına yukarıdaki örnekteki gibidir.

Polimorfizm, Dinamik Bağlanma ve Genel Programlama​


Yöntem m, Object türünün bir parametresini alır. Herhangi bir nesne ile çağırabilirsiniz.Bir alt türün nesnesi, üst tür değeri gerektiğinde kullanılabilir. Bu özellik polimorfizm olarak bilinir.M (Object x) yöntemi yürütüldüğünde, x’in toString yöntemi bağımsız değişkeni çağrılır. x, GraduateStudent, Öğrenci, Kişi veya Nesne örneği olabilir. GraduateStudent, Öğrenci, Kişi ve Nesne sınıflarının toString yöntemini kendi uygulamaları vardır. Hangi uygulamanın kullanıldığı, çalışma zamanında Java Sanal Makinesi tarafından dinamik olarak belirlenir. Bu yetenek dinamik bağlama olarak bilinir.

Dinamik Bağlama​



Dinamik bağlanma şu şekilde çalışır: Bir nesnenin o C1, C2, ..., Cn-1 ve Cn sınıflarının bir örneği olduğunu varsayalım; burada C1, C2'nin bir alt sınıfıdır, C2, C3, ... ve Cn-1, Cn'nin bir alt sınıfıdır. Yani, Cn en genel sınıftır ve C1 en spesifik sınıftır. Java'da Cn, Object sınıfıdır. O bir yöntem p'yi çağırırsa, JVM bulunana kadar bu sırayla C1, C2, ..., Cn-1 ve Cn'deki p yöntemini arar. Bir uygulama bulunduğunda, arama durur ve ilk bulunan uygulama çağrılır.

Yöntem Eşleştirme ve Bağlama (Method Matching vs. Binding)​

Bir yöntem imzasını eşleştirmek ve bir yöntem uygulamasını bağlamak iki konudur. Derleyici, parametre türüne, parametre sayısına ve parametrelerin derleme sırasındaki sırasına göre bir eşleştirme yöntemi bulur. Bir yöntem birkaç alt sınıfa uygulanabilir. Java Sanal Makinesi, yöntemin uygulanmasını dinamik olarak çalışma zamanında bağlar.

Genel Programlama





Polimorfizm, yöntemlerin çok çeşitli nesne argümanları için genel olarak kullanılmasına izin verir. Bu genel programlama olarak bilinir. Bir yöntemin parametre türü bir üst sınıfsa (ör. Nesne), parametrenin alt sınıflarından (ör. Öğrenci veya Dize) bu yönteme bir nesne iletebilirsiniz. Yöntemde bir nesne (örneğin, bir Öğrenci nesnesi veya bir String nesnesi) kullanıldığında, çağrılan nesnenin yönteminin (örn., ToString) belirli bir uygulaması dinamik olarak belirlenir.



Casting Objects​


Bir ilkel tipteki değişkenleri diğerine dönüştürmek için döküm operatörünü zaten kullandınız. Döküm, bir kalıtım hiyerarşisi içinde bir sınıf tipindeki bir nesneyi diğerine dönüştürmek için de kullanılabilir. Önceki bölümde, ifade

Kod:
m (new Student ());

new Student () nesnesini Object türünün bir parametresine atar. Bu ifade şuna eşittir:

Kod:
Object o = yeni Student (); // Örtülü döküm
m(o);

Döküm Neden Gereklidir? (Casting)

Aşağıdaki ifadeyi kullanarak o nesne başvurusunu Öğrenci türünün bir değişkenine atamak istediğinizi varsayalım:

Kod:
Student b = o;


Derleme hatası oluştu. Object o = new Student () ifadesi neden çalışıyor ve Student b = o ifadesi çalışmıyor? Bunun nedeni, bir Öğrenci nesnesinin her zaman bir Nesne örneğidir, ancak bir Nesne mutlaka bir Öğrenci örneğidir. O'nun gerçekten bir Öğrenci nesnesi olduğunu görebilseniz de, derleyici bunu bilmek o kadar zeki değildir. Derleyiciye o'nun bir Öğrenci nesnesi olduğunu söylemek için açık bir döküm kullanın. Sözdizimi, ilkel veri türleri arasında döküm yapmak için kullanılana benzer.
Hedef nesne türünü parantez içine alın ve yayınlanacak nesnenin önüne aşağıdaki gibi yerleştirin:

Kod:
Student b = (Student ) o; // Açık döküm

Superclass ‘ın Subclass’a dökümü​

Bir nesneyi bir üst sınıftan bir alt sınıfa çevirirken açık döküm kullanılmalıdır. Bu tür dökümler her zaman başarılı olmayabilir.

Kod:
Elma x = (Elma) meyvesi;
Turuncu x = (Turuncu) meyve;

ArrayList Class


Nesneleri saklamak için bir dizi oluşturabilirsiniz. Ancak dizi oluşturulduktan sonra dizinin boyutu sabitlenir. Java, sınırsız sayıda nesneyi saklamak için kullanılabilecek ArrayList sınıfını sağlar.

Yapabilecekleriniz;

  • Boş bir liste oluşturur.
  • Bu listenin sonuna yeni bir öğe o ekler.
  • Bu listede belirtilen dizine yeni bir öğe o ekler.
  • Bu listedeki tüm öğeleri kaldırır.
  • Bu liste o öğesini içeriyorsa true değerini döndürür.
  • Belirtilen dizindeki bu listeden öğeyi döndürür.
  • Bu listedeki ilk eşleşen öğenin dizinini döndürür.
  • Bu listede öğe yoksa true değerini döndürür.
  • Bu listedeki son eşleşen öğenin dizinini döndürür.
  • O öğesini bu listeden kaldırır.
  • Bu listedeki öğelerin sayısını döndürür.
  • Belirtilen dizindeki öğeyi kaldırır.
  • Öğeyi belirtilen dizinde ayarlar.

Oluşturulması:


Örnek:

 

CyberXhackk

Kıdemli Üye
13 Mar 2016
3,132
10
C/C++ Dev.
konu içeriği biraz ağır hocam kendi kendinize örnekler çözmenizi öneririm kavramlar daha rahat oturacaktır

Konu içeriği ağır değil aslında, OOP programlamanın en temel konusu Java gösterilen bir okulda herhangi bir dersin 2. dersinde polimorfizm anlatılır zaten, arkadaşın anlamama sebebi dili biraz ağır kullanmışsınız bir de OOP konusunda yeni olabilir veya bunların dışında başka bir OOP dilden geliyor olabilir, C++ daki oop ile Java'daki oop arasında çok farklılıklar var mesela. Felsefik olarak aynı yaklaşılsa da syntax keyword farklılıkları anlamda zorluk yaratabiliyor.
 
Ü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.