BMÜ-112 Algoritma ve Programlama-II Inheritance (Kalıtım) Yrd. Doç. Dr. İlhan AYDIN



Benzer belgeler
Kalıtım ( Inheritance ) BBS-515 Nesneye Yönelik Programlama

Java da Soyutlama ( Abstraction ) ve Çok-biçimlilik ( Polymorphism )

NESNE YÖNELİMLİ PROGRAMLAMA HAFTA # 9

Arayüz (Interface) Altuğ B. Altıntaş 2003 Java ve Yazılım Tasarımı - Bölüm 7 1

Nesne Yönelimli Programlama

NESNE YÖNELİMLİ PROGRAMLAMA HAFTA # 7

Görsel Programlama DERS 02. Görsel Programlama - Ders02/ 1

İçerik. Kapsülleme ( Encapsulation ) Java da Kalıtım: Örnek 2.1. Kalıtım ( Inheritance ) Tekrar Ziyaret. Java da Kalıtım: Örnek 2.2.

BİL-141 Bilgisayar Programlama I (Java)

Kapsülleme ( Encapsulation ) BBS-515 Nesneye Yönelik Programlama

7. HAFTA. Erişim Belirleyiciler

Uzaktan Eğitim Uygulama ve Araştırma Merkezi

Kalıtım (Inheritance)

Erişim konusunda iki taraf vardır:

ANA SINIF TÜRETİLEN BİRİNCİ SINIF TÜRETİLEN İKİNCİ SINIF

NESNE YÖNELİMLİ PROGRAMLAMA HAFTA # 4. Yrd.Doç.Dr.Hacer Karacan

Paket Erişimleri. Altuğ B. Altıntaş 2003 Java ve Yazılım Tasarımı - Bölüm 4 1

YZM 2105 Nesneye Yönelik Programlama

HSancak Nesne Tabanlı Programlama I Ders Notları

Arayüz soyut metotların oluşturduğu bir koleksyondur. Bir sınıf arayüzü çalıştırırken arayüzün sahip olduğu soyut metotları da miras alır.

Nesne tabanlı programlama nesneleri kullanan programlamayı içerir. Bir nesne farklı olarak tanımlanabilen gerçek dünyadaki bir varlıktır.

Sınıf üyeleri: değişkenler (fields) and metotlar (methods) Değişkenler: nesne içerisindeki değişkenlerdir Temel veri tipi veya sınıf tipi

Java Dersi. Altuğ Bilgin Altıntaş

PAKET ERİŞİMLERİ SINIFLARIN YENİDEN KULLANIMI. BMU-112 Algoritma ve Programlama-II Yrd. Doç.Dr. İlhan AYDIN

Nesne Yönelimli Programlama

Sunum İçeriği. Programlamaya Giriş

5. Bölüm Alt Sınıflar (Nested Classes) Java ile Nesne Merkezli ve Fonksiyonel Programlama Akın Kaldıroğlu

C++ Dersi: Nesne Tabanlı Programlama

Lab7 DOĞU AKDENİZ ÜNİVERSİTESİ BİLGİSAYAR VE TEKNOLOJİ YÜKSEKOKULU BİLGİSAYAR PROGRAMCILIĞI. BTEP212 Java. Uygulama1: package javaapplication58;

abstract Sınıflar 1 Sınıf sınıf1 new class Ama aşağıdaki şekilde referans alınabilir;

5.HAFTA. Sınıf ve Nesne Kavramı, Metot Oluşturma, Kurucu Metot, this Deyimi

Facade (Cephe) Tasarım Şablonu KurumsalJava.com

Sınıf üyeleri: değişkenler (fields) and metotlar (methods) Değişkenler: nesne içerisindeki değişkenlerdir Temel veri tipi veya sınıf tipi

Nesne Yönelimli Programlama

Uzaktan Eğitim Uygulama ve Araştırma Merkezi

/*Aşağıda ki kodları doğru şekilde anlar ve kullanırsanız java da sınıfları biraz da olsa anlamış olursunuz.*/

Ders 8 Konu Özeti ve Problemler

BİL-142 Bilgisayar Programlama II

Sınıfların Tekrardan Kullanılması. Altuğ B. Altıntaş 2003 Java ve Yazılım Tasarımı - Bölüm 5 1

İki Yöntem. Komposizyon (Composition) Kalıtım (Inheritance)

NESNE YÖNELİMLİ PROGRAMLAMA HAFTA # 6

Programlama Dillerinde Kullanılan Veri Tipleri

Decorator Tasarım Şablonu

Yazılım Kodlama ve İ simlendirme Standartları v1.0

MOBIL UYGULAMA GELIŞTIRME

Öğr. Gör. Serkan AKSU 1

NESNE TABANLI PROGRAMLAMA

1. Aşağıdaki program parçacığını çalıştırdığınızda result ve param değişkenlerinin aldığı en son değerleri ve programın çıktısını yazınız.

Bölüm 12. Nesne yönelimli programlama desteği

3. Bölüm Soyut Sınıflar (Abstract Classes) Java ile Nesne Merkezli ve Fonksiyonel Programlama Akın Kaldıroğlu

C++ Dersi: Nesne Tabanlı Programlama

İsimler ve Kapsam. 24 Şubat Programlama Dilleri - Pamukkale Üniversitesi 1

NESNEYE YÖNELİK PROGRAMLAMA

İÇİNDEKİLER VII İÇİNDEKİLER

BTEP243 Ders 3. class Yazım Kuralı:

Önemli noktalar. Paradigma Nesnelere Giriş Mesajlar / Ara bağlantılar Bilgi Gizleme (Information Hiding ) Sınıflar(Classes) Kalıtım/Inheritance

ELN1001 BİLGİSAYAR PROGRAMLAMA I

Nesneye Dayalı Programlama

İsimler ve Kapsam. Hafta 4 Ders 2 BLG339 PROGRAMLAMA DİLLERİ KAVRAMI

Görsel Programlama-I (Visual Programming) 2.Hafta

YZM 2105 Nesneye Yönelik Programlama

JAVA PROGRAMLAMA DİLİ ÖZELLİKLERİ

Nesneye Yönelik Programlama (OOP) 7.Hafta

NESNEYE YÖNELİK PROGRAMLAMA. Yrd.Doç.Dr. Zeynep ORMAN

Java da, tüm değişkenlerin kullanılmadan önce tanımlanması edilmesi gerekir. Bir değişken tanımlamanın temel gösterimi bu şekildedir:

Eclipse, Nesneler ve Java 2 Java Nereden Çıktı? 2

MALTEPE ÜNİVERSİTESİ MÜHENDİSLİK FAKÜLTESİ YAZILIM MÜHENDİSLİĞİ LİSANS PROGRAMI

BMÜ-112 ALGORİTMA VE PROGRAMLAMA-II LABORATUARI DENEY-2 FÖYÜ

C# Metotlar ve Metot Tanımlama

Malzeme Gereksinim Planlaması (MRP)

NESNE TABANLI PROGRAMLAMA-1 DERS UYGULAMALARI (22 EYLÜL - 14 KASIM

Nesneye Dayalı Programlama

NESNE TABANLI PROGRAMLAMA Temel Kavramlar

Bölüm 11. Soyut veri tipleri ve kapsülleme kavramları ISBN

Java ile Nesneye Yönelik Programlama (Object Oriented Programming)

Üst Düzey Programlama

C++ Dersi: Nesne Tabanlı Programlama

Fonksiyonlar. C++ ve NESNEYE DAYALI PROGRAMLAMA 51. /* Fonksiyon: kup Bir tamsayının küpünü hesaplar */ long int kup(int x) {

TOPLAMADA KISAYOLLAR

Mühendislik Fakültesi Elektrik-Elektronik Mühendisliği C Programlama 7. Bölüm Metot Tanımlama ve Kullanma

Görsel Programlama DERS 03. Görsel Programlama - Ders03/ 1

Göstericiler (Pointers)

ALGORİTMA İ VE PROGRAMLAMA

İçerik. Temel Kavramlar. Nesne Nedir? 1. Nesne : Örnek. Nesne Nedir? 2. Geçen hafta: Bu hafta: BBS-515 Nesneye Yönelik Programlama

BMM3101 PROGRAMLAMA DİLLERİ

KODLAMA SİSTEMLERİNİN TANIMI :

Java da İstemci Tarafı Uygulamalar

public static int Toplam int x, int y

Temel Kavramlar BBS-515 Nesneye Yönelik Programlama

YZM 2105 Nesneye Yönelik Programlama

Operatörlerin Aşırı Yüklenmesi

Sınıf Diyagramları Amaç: Sınıf Diyagramları Nasıl Çizilir?

YZM 2108 Yazılım Mimarisi ve Tasarımı

JAVADA METOTLAR. BMÜ-111 Algoritma ve Programlama. Yrd. Doç. Dr. İlhan AYDIN

Yrd. Doç. Dr. Caner ÖZCAN

Adapter Tasarım Şablonu

Karar Destek Sistemi (DSS) Yazılımı ve Arayüzü

BMH-303 Nesneye Yönelik Programlama

Ekle Menüsü İşlevleri ÜNİTE 3. Bu üniteyi çalıştıktan sonra; Ekle Menüsü Çizimler Grafikler Bağlantılar Metin

HSancak Nesne Tabanlı Programlama I Ders Notları

Transkript:

BMÜ-112 Algoritma ve Programlama-II Inheritance (Kalıtım) Yrd. Doç. Dr. İlhan AYDIN

Kalıtım Mantığı Bazı sınıflar, kendi özeliklerini taşıyan özel tiplere ayrılabilir. Örnek: Bisiklet: dağ bisikleti, yarış bisikleti Dağ bisikleti ve yarış bisikleti; bisiklet sınıfının alt-sınıflarıdır ( sub-classes ). Bisiklet sınıfı; dağ bisikleti ve yarış bisikleti sınıflarının üstsınıfıdır ( super-class ). Her alt-sınıf kendi üst-sınıfının özelliklerini ve işlevlerini taşır (kalıtım - inheritance ). Dağ bisikleti ve yarış bisikleti, bisiklet sınıfına ait özellikleri taşır: vites, tekerlek, pedal, vb. Dağ bisikleti ve yarış bisikleti, bisiklet sınıfına ait işlevleri gösterir: hızlanma, fren yapma, vites değiştirme, vb.

Kalıtım Mantığı -2 Bir alt-sınıf, üst-sınıfından taşıdığı özelliklere ve işlevlere ek olarak; kendine ait özellikleri ve işlevleri içerebilir (tanımlayabilir). Örnek: Dağ bisikleti, tırmanmayı kolaylaştıran ek viteslere sahip olabilir. Bir alt-sınıf aynı zamanda, üst-sınıfından taşıdığı işlevleri değiştirebilir (üzerine yazma method overriding ). Örnek: Dağ bisikleti, bisiklet sınıfının vites değiştir işlevini, ek vitesleri kullanmayı sağlayacak şekilde değiştirebilir. Kalıtım sadece tek seviyeli olmak zorunda değildir, birden çok seviyede tanımlanabilir. Bir alt-sınıf her zaman, üstündeki tüm sınıfların özelliklerini ve işlevlerini taşır. Kalıtım ağacında ( inheritance tree ) aşağılara doğru inildikçe sınıfın öznelliği artar.

Kalıtım Mantığı -3 Sınıflar arasındaki kalıtım, uygulamada aşağıdaki avantajları sağlar: Alt-sınıflar, üst-sınıflarının özelliklerini ve işlevlerini taşıdıklarından; programlama sırasında üst-sınıfların kodu defalarca tekrar kullanılabilir ( reuse ). Java da (C++ da desteklenen) çoklu kalıtım (multiple inheritance) desteklenmez. Bir subclass ın ancak bir tane direct super class ı olabilir. Çoklu kalıtım yerine çoklu arayüz (multiple interface) kullanımı mevcuttur. Üzerine yazma/çeşitleme (overriding) sayesinde türeyen sınıflarda miras alınan metodlar ihtiyaçlara göre değiştirilebilir.

Kalıtım Mantığı -4 Bir sınıfın diğerindeki özellikleri miras olarak alması için kullanılan anahtar sözcük extends dir. Anlam olarak "Bu sınıf şu sınıfı genişletir yani ondaki özellik ve metodları alır ve yenilerini ekler demektir. Miras alınan sınıf - Superclass Miras alan sınıf Subclass Herbir subclass, superclass olma adayıdır. Bir sınıftan türeyen sınıfın yapılandırıcısı türediği sınıfın yapılandırıcısını 'super() şeklinde çağırabilir.

Java da Kalıtım: Örnek - 1

Java da Kalıtım: Örnek 2.1

Java da Kalıtım: Örnek 2.2

Üzerine Yazma ( Method Overriding ) Bir alt sınıfta, üst sınıfa ait bir yöntemi; aynı isim, imza ve dönüş tipi ile tanımlarsak, üst sınıftaki yöntemin üzerine yazmış oluruz. Alt sınıftan nesne oluşturulduğunda yöntem çağrılırsa, üst sınıfa ait yöntem yerine, alt sınıfta tanımlanmış yöntem koşturulur.

Neden Üzerine Yazma? - 1 Genel sınıfta, kendinden türetilen tüm sınıflarda ortak olan işlevselliği tanımlamayı sağlar. Bir üst sınıftan alt sınıflara uzanan hiyerarşiyi tanımlamanın amacı, daha az detaydan daha çok detaya doğru işlevselliği oluşturmaktır. Bu hiyerarşide üst sınıfın görevi, alt-sınıfların doğrudan kullanabilecekleri (veya üzerine yazabilecekleri) genel özellikleri ve yöntemleri tanımlamaktır.

Neden Üzerine Yazma? - 2 Üst sınıf aynı zamanda, alt sınıfları için tutarlı bir arayüz oluşturur (ortak tip) Bu sınıfları kullanan programlar, alt sınıflardan oluşturulan nesnelerin yöntemlerini, üst sınıfın yöntemlerini kullanır gibi kullanabilirler. Hangi seviyedeki sınıfın yönteminin kullanılacağına koşturma zamanında karar verilebilir ( polymorphism ). Bu özellik, if veya switch kullanımına gerek bırakmaz. Yeni bir çalışan alt sınıfı eklendiğinde mevcut kodun değiştirilmesi gerekmez

Sınıflar Arasında Kalıtım İlişkisi Genel sınıf ile onun özel durumlarına karşılık gelen arasındaki ilişki Ebeveyn-çocuk ilişkisi ( inheritance ) ( UML) Okun yönü genel sınıfı gösterir Özel sınıflar genel sınıftan kalıtsal olarak özellikleri ve operasyonları alırlar. Özel sınıflar yeni özellikler ve operasyonlar tanımlayabilir veya kalıtsal yoldan aldıkları operasyonları yeniden tanımlayabilirler ( overriding ).

Kalıtım Örnek - I Yapılandırıcılar EKRAN ÇIKTISI Hayvan SINIFI YAPICISI DortAyakli SINIFI YAPICISI Otcul SINIFI YAPICISI

Kalıtım Örnek-II Ucgen sınıfından bir nesne 3 parametre alan yapıcı metodu ile oluşturulduğunda ilk 2 parametre ana sınıftaki yapılandırıcıya aktarılmış, böylece Sekil sınıfından türetilen nesnelerin ortak özelliği olan Taban ve Yuksekliği türeyen sınıfın içinde tekrar bildirme zorunluluğu ortadan aldırılmıştır.

Kalıtım Örnek-III Yandaki main yordaminin ciktisi nedir? Programin Ciktisi: I'm a Parent I'm a Child I'm a Child

Arayüz Sınıflar, Soyut Sınıflar, Dahili Sınıflar

Arayüz (Interface) Kavramı Java'da arayüz (interface), bir sınıfta olması gereken metod ve özellikleri tanımlayan yapıdır. Kendisi normal bir sınıf değildir, sadece neyin yapılacağını göstermekte, ancak nasıl yapılacağını göstermemektedir. Java da çoklu kalıtım dahili sınıflar ve arayüzlerle yapılmaktadır. Arayüzler değişkenler ve gövdesiz (soyut) metodlardan oluşur. Arayüzlerin kullanılmasındaki amaç farklı sınıfların, yapış şekilleri farklı dahi olsa aynı işlevleri yerine getirmelerini (polimorfizm) sağlamaktır.

Arayüz Oluşturma Arayüz tanımlanırken Class ifadesi yerine Interface ifadesi kullanılır. İçerdiği metodlar gövdesizdir. Bu ifade, bir maddenin yoğunluğu, hacmi ve kütlesi olur demenin Java daki yoludur. Maddenin hacmi nasıl hesaplanır, kütlesi nasıl verilir, hiçbir şekilde belirtmemektedir. Sadece ne olması gerektiğini söylemektedir.

Arayüz Uygulaması Bir sınıfın arayüzdeki bütün metodları içerdiğini, gerçekleştirdiğini belirtmesine uygulama (implementation) denir ve 'implements anahtar kelimesiyle ifade edilir. Burada "Küp/Küre diye bir nesnemiz var ve o bir maddedir, bir maddede olabilecek bütün nitelikler onda da bulunur. demiş olduk ve bunların nasıl hesaplandığını gösterdik.

Soyut Sınıf Kavramı Programlama sırasında genel davranışları gösteren sınıflar soyut sınıf ( abstract class ) olarak kodlanabilir. Soyutlama ( abstraction ) Soyut sınıflardan nesne oluşturulmaz. Soyut sınıflar, ilgili alt-sınıfları tanımlamak ve onlara ilişkin detayları doldurmak amacıyla kullanılırlar (tekrar kullanıma esas olarak).

Soyut Sınıflar Bazı metodlarını tanımlamış, bazılarının uygulamasını kendisinden türeyen sınıflara bırakmış olan sınıflara soyut sınıf (abstract class) denir. Tüm alt sınıfları tarafından paylaşılacak metodların tanımlarını içeren sınıflardır. Bunun yanında içeriği belirlenmemiş sadece etiketi belli bir yada daha fazla soyut metod içerirler. Soyut sınıftan nesne oluşturulamaz. Mutlaka extends anahtar sözcüğü ile yeni sınıflara miras bırakarak kullanılmalıdır.

Soyut Sınıf Oluşturma Sınıfın ve metodun soyut olduğunu belirtmek için abstract anahtar sözcüğü kullanılır. Soyut metodlar şu örneklerde belirtildiği gibi gövdeleri olmayacak şekilde tanımlanır: public abstract voids1(); public abstract ints2(int a); Eğer bir sınıf enaz bir soyut metod içeriyorsa soyut sınıf olarak tanımlanması gereklidir. abstract class N{ public abstract voids1(); }

Soyut Sınıf Oluşturma Eğer bir alt sınıf soyut bir üst sınıftan türetilmiş ve üst sınıfın tüm soyut metodlarını kendi bünyesinde tanımlamamışsa o da bir soyut sınıf olmak zoundadır. abstract class N{ public abstract voids1(); } class N1 extends N{ public voids1(){ System.out.println( s1 ) } } abstract class N2 extends N{ public voids2(){ System.out.println( s2 ) } }

Soyut Sınıflar Soyut sınıfların temel amacı büyük yazılım projelerinin organize bir şekilde geliştirilmelerini sağlamaktır. İlk önce bir soyut sınıf oluşturulur ve yazması planlanan metodlar bu sınıfa soyut şekilde konur. Sonra soyut sınıfların alt sınıfları tanımlanır. Bütün soyut metodların alt sınıflardaki ifadeleri tamamlandığında yazılım tamamlanmış olur.

Örnek-1 Bir küp içinde bir küre içinde kütle, hacim ve yoğunluğun çarpımına eşittir. Ancak önceki örnekte yaptığımız iki nesnede de bu ortak özelliği kullanamıyor ve kütle hesaplamasını kendisi yapılıyor. Matter ara yüzünü implement eden ne kadar sınıf varsa bu işlem o kadar tekrarlanacak demektir. Bu 'ortak işlemi bir kere yapıp, hep onun kullanılmasını sağlamak mümkündür.

Örnek1-devam Soyut Body sınıfı, hem küpün hem de kürenin ortak özelliklerini içermektedir. Yoğunluk özelliği ikisinde de ortaktır. Bu şekilde kalıtım yoluyla küp ve küreye geçebilir. getvolume() metodu hacim hesaplamak için her nesne farklı bir method kullandığı için soyut bırakılmıştır. getmass() hesaplaması sınıftan sınıfa değişmediği için tanımlanmıştır Burada getmass() metodu henüz yazılmamış getvolume() metodunu kullanarak bir işlem yapabilmektedir. Bu sadece NYP teknikleriyle mümkün olan bir programlama işlemidir.

Örnek1-devam İki sınıf ta getmass() diye bir metod yazmak zorunda kalmadan, hiç bir ek kodlama yapmadan kütle hesabı yapabilmektedir.

Örnek2

Arayüzle Çoklu Kalıtım Sağlamak Bir alt sınıfın sadece bir direk üst sınıfı olabilir. Ancak aynı anda bir sınıfı extend edip bir veya daha fazla arayüzü implement edebilir. extends anahtar sözcüğünün aksine, implements anahtar sözcüğüyle bir sınıfın aldığı hiç bir şey yoktur. Sadece bazı metodları implement etmeyi taahhüt etmektedir.

Arayüzle Çoklu Kalıtım Sağlamak Cube sınıfı hem Body sınıfını extend edebilir hem de Matter arayüzünü implement edebilir. public class Cube extends Body implements Matter{ //... } Üstsınıf'ın bir arayüzü implement etmesi durumunda altsınıf ta etmiş sayılır. public class Body implements Matter{ //... } dersek public class Cube extends Body{ //... } dememiz yeterlidir. Cube sınıfı Matter i implement etmeyi de miras yoluyla almış demektir.

Arayüzlerin Kullanım Özellikleri Arayüzler bütün metodları soyut olan bir soyut sınıf gibi düşünülebilirler. Ancak sınıflardan ayrılan başka özellikleri vardır. Ayrıca söylensin veya söylenmesin bütün metod ve özellikler public sayılır ve başlarına protected veya private gibi anahtar sözcükler alamazlar. Arayüzler de bütün özellikler public, final ve static tir. O yüzden arayüzler de tanımlanan özellikler bir veya daha fazla sınıfta kullanılan sabitler için kullanılır.

Arayüzlerin Kullanım Özellikleri Circle sınıfında tanımlanmadığı halde PI değişkeni, sadece Math Constants arayüzünü implement ettiği için erişilebilir durumdadır. Bu arayüzü implement eden başka bir sınıfta aynı şekilde PI ye erişebilir. Bu anlamda PI bir sabittir. Ama PI sadece implement edilen class'lar tarafından görülmekte olduğundan global değildir. Zaten Java da global değişken ve sabit ihtiyacı duyulan yerlerde interface kullanılır.

Soyut Sınıf ve Arayüzler Özet Soyut sınıflar ve arayüzler, kendilerinden türetilen alt sınıflara ortak alanları ve üyeleri sunarlar. Tanımlanış amaçları her nekadar benzer olsa da yapıları ve kullanım şekilleri açısından farklılıkları vardır. Arayüzler sadece özelliklerin ve metodların tanımlamalarını içerirken, Soyut sınıflarda alanlar ve üyelerin tanımlamaların yanısıra işlevlerine de yer verilebilir.

Soyut Sınıflar package not04c; public abstract class VergiKaynagi { private double oran; } public VergiKaynagi(double oran) { this.oran = oran; } public double getoran() { return oran; } public abstract double getaylikvergi(); public abstract double getyillikvergi(); public abstract double getsabitvergi();

Soyut Sınıflar-2 package not04c; public class KiraKontrati extends VergiKaynagi { private double aylikkira; } public KiraKontrati(double oran, double aylikkira) { super(oran); this.aylikkira = aylikkira; } public double getaylikvergi() { return aylikkira * getoran(); } public double getyillikvergi() { return getaylikvergi() * 12; } public double getsabitvergi() { return 0; } Abstract olan tum siniflari implement etmen gerekir, aksi taktirde extend eden sinif da abstract olmak zorundadir.

DAHILI SINIFLAR

Neden Dahili Sinif Diğer programlama dillerinde olan çoklu kalıtım (multiple inheritance) özelliği Java programlama dilinde yoktur. Java programlama dilinde çoklu kalıtım desteğinden faydalanmak için arayüz (interface) ve dahili sınıflar (inner classes) kullanılır

Dahili Sınıflar Sınıf içerisinde tanımlanmış sınıflardır. Birbiriyle bağlantılı olan yapıları bir bütün halinde tanımlamamıza yardımcı olurlar. Okunabilirlik ve yazılabilirlik kurallarına aykırı olduklarından pek tercih edilmemektedirler. Dahili sınıfları 3 grupta inceleyebiliriz: Üye dahili sınıflar (member classes) Yerel sınıflar (local classes) İsimsiz sınıflar (anonymous classes)

Üye Dahili Sınıflar Nesneler farklı nesnelerin bir araya gelmesiyle oluşabilmektedir. (Örn. araba) Bir araya gelerek bir bütün oluşturan bu nesnelerin hepsini dahili sınıflar olarak ana sınıf içerisinde tanımlayabiliriz.

Örnek Toplama sınıfına ait bir nesne oluşturmak için, önce Hesaplama sınıfına ait bir nesne oluşturmamız gerekir. Hesaplama.Toplama ht = new Hesaplama().new Toplama() ;

Üye Dahili Sınıflar Dâhili üye sınıflara, public, friendly, protected veya private erişim belirleyicileri atanabilir. Dikkat edilmesi gereken diğer bir husus ise bir dâhili üye sınıf private erişim belirleyicisine sahip olsa dahi, çevreleyici sınıf içerisindeki tüm yordamlar tarafından erişilebilir olmasıdır. Dâhili üye sınıflar, içerisinde bulundukları çevreleyici sınıfların tüm alanlarına (statik veya değil private dâhil) yordamlarına (statik veya değil-private dâhil) erişebilirler.

Üye Dahili Sınıflar Içiçe üye dahili sınıflar yaratılabilir. Dâhili üye sınıflar, soyut (abstract) sınıf olarak tanımlanabilir. Bu soyut dâhili üye sınıflardan türeyen sınıflar, soyut dâhili üye sınıfların içerisindeki gövdesiz (soyut) yordamları iptal etmeleri gerekmektedir Üye dahili sınıflar kendisini çevreleyen sınıflarla aynı adı taşıyamazlarç

Yerel Dahili Sınıflar Yerel sınıflar, yalnızca içinde tanımlandıkları, metodun veya bloğun içerisinde geçerlidir. Dahili üye sınıfların çevreleyici sınıfları yerine, yerel sınıfların çevreleyici yordamları veya blokları vardır. Yerel sınıflar tanımlandıkları bu metodların veya blokların dışarısından erişilemezler.

Yerel Dahili Sınıflar Yerel sınıflar başka sınıflardan türetilebilir veya arayüzlere (interface) erişebilir. Yerel sınıfların yapılandırıcıları olabilir. Yerel sınıflar, içinde bulundukları yordamın sadece final olan değişkenlerine ulaşabilirler. Yerel sınıflar, statik veya statik olmayan yordamların içerisinde tanımlanabilirler.

Yerel Dahili Sınıflar Yerel sınıflar, private, protected ve public erişim belirleyicisine sahip olamazlar sadece friendly erişim belirleyicisine sahip olabilirler. Yerel sınıflar, statik olarak tanımlanamaz. Yerel sınıf kendisini çevreleyen sınıfla aynı ismi taşıyamaz

İsimsiz Dahili Sınıflar İsimsiz ifade edilebilen sınıflardır. Özellikle olay dinleyicilerin (event listeners) devreye sokulduğu uygulamalarda sıkça kullanılırlar. Diğer dâhili sınıf çeşitlerinde olduğu gibi, isimsiz sınıflar direk extends ve implements anahtar kelimelerini kullanarak, diğer sınıflardan türetilemez ve arayüzlere erişemez. İsimsiz sınıfların herhangi bir ismi olmadığı için, yapılandırıcısı da (constructor) olamaz.

İsimsiz sınıfları, yerel sınıfların kısaltılmışı gibi düşünebilirsiniz. Yerel sınıflarda return new BenimToplayicim() yerine, isimsiz sınıflarda hangi sınıf tipinde değer döndürüleceği en başta belirtilir Isimsiz ve yerel dahili siniflarin ayni is icin uygulanmasi ISIMSIZ SAHILI SINIF: YEREL DAHILI SINIF:

Örnek Yerel sınıflarda return new BenimToplayicim() yerine, isimsiz sınıflarda hangi sınıf tipinde değer döndürüleceği en başta return new Toplayici() ile belirtildi.