JAVA DERSLERİ – 44 – NESTED CLASS – İÇ İÇE SINIFLAR-2

By | 4 Ocak 2020

İÇ İÇE SINIFLAR

Bundan bir önceki dersimizde dahili üye sınıflardan bahsetmiştim. Bu dersimizde de Local ve Anonymous sınıflardan bahsedeceğim.

Local Class / Yerel Sınıflar

Öncelikle Dahili ve yerel sınıf farkından bahsetmekte fayda var. Yerel sınıfları herhangi belli bir alanda oluşturabiliriz. Örneğin bir metodun veya bir döngünün içinde. Bir işlemin gerçekleşmesi için bir döngünün çalıştırıldığını düşünün. Bu döngünün içinde bir sınıf olsun. Bu neyi gösteriyor?
Bu sınıfımızın çalışma aralığı o döngünün başlangıcına ve sonuna bağlıdır. İş süreci bittiğinde sınıfımızın da işi bitmiş oluyor.

Şimdi bahsettiğimiz bu şeye uygun bir örnek yapalım aşağıda. metot içinde sınıfımız olsun.

public class Main { //Çevreleyici Sınıfımız
    public static void main(String[] args) { //Main Sınıfının metodu
        class AltSinif{ //main metodunun sınıfı
            void mesaj(){ //AltSinif sinifinin metodu
                System.out.println("Mesaj Ekrana Basıldı.");
            }
        }
        AltSinif as = new AltSinif();
        as.mesaj();
    }
}

Genelden özele doğru belirtmek gerekirse;

Main sınıf > main metodu > AltSinif sınıfı > mesaj metodu

Local sınıfımızı başka bir yerde oluşturup kullanalım şimdi.

public class Main {
    public static void main(String[] args) {
        int i = 6;
        if (i > 5){
            class MrCaracal{
                void mrcaracal(){
                    System.out.println("Local Sınıfımız Çalıştı");
                }
            }
            MrCaracal a = new MrCaracal();
            a.mrcaracal();
        }else{
            System.out.println("Local Sınıfımız Çalışmadı");
        }
    }
}

Üstteki örneğimizde ise MrCaracal sınıfımızı bir if bloğunun içinde oluşturduk. MrCaracal varlığı if bloğunun başına ve sonuna bağlıdır. if bloğu son bulduğunda sınıfımız da son bulacaktır.
İşte bu şekilde bir metodun, if bloğunun veya bir döngü gibi yerlerin içine oluşturulan sınıflara Local / Yerel sınıf denir.

Anonymous Class / İsimsiz Sınıflar

Eğer Override dersimizi incelediyseniz veya override’nin ne olduğunu biliyorsanız bir şeylerin size tanıdık geldiğini göreceksiniz.
Konunun tam anlaşılması için önce yeni bir sınıf oluşturalım ve sınıfın içindeki metodu çağırıp ekrana ne çıktı verdiğine bakalım.

Normal bir sınıfın nesnesini oluşturup kullanma

Üstteki resimde de görüldüğü gibi normal bir şekilde sınıfımız ve metodumuz çalıştı.

Şimdi de Anonymous class yöntemini kullanalım.

Anonymous bir sınıf oluşturup kullanma

Resimde de görüldüğü üzere sınıfımızın içindeki metot override edildi. İşte bu gibi işlemlerin yapılmasına Anonymous Class denir.



Oracle‘nin sayfasını incelediğim zaman bu konu hakkında çok daha iyi bir örnek buldum. İlk bakışta kafanız karışsa da neler olup bittiğini anlamaya çalışın. Örnekte metot ve değişken isimleri ingilizceydi ben Türkçeye çevirdim.

public class Main {
    interface MerhabaDunya {
        public void selamla();
        public void biriniSelamla(String birisi);
    }

    public void merhabaSoyle() {

        class IngilizceSelamla implements MerhabaDunya {
            String isim = "world";
            public void selamla() {
                biriniSelamla("world");
            }
            public void biriniSelamla(String birisi) {
                isim = birisi;
                System.out.println("Hello " + isim);
            }
        }

        MerhabaDunya ıngilizceSelamla = new IngilizceSelamla();

        MerhabaDunya fransizcaSelamla = new MerhabaDunya() {
            String isim = "tout le monde";
            public void selamla() {
                biriniSelamla("tout le monde");
            }
            public void biriniSelamla(String birisi) {
                isim = birisi;
                System.out.println("Salut " + isim);
            }
        };

        MerhabaDunya ispanyolcaSelamla = new MerhabaDunya() {
            String isim = "mundo";
            public void selamla() {
                biriniSelamla("mundo");
            }
            public void biriniSelamla(String birisi) {
                isim = birisi;
                System.out.println("Hola, " + isim);
            }
        };
        ıngilizceSelamla.selamla();
        fransizcaSelamla.biriniSelamla("Fred");
        ispanyolcaSelamla.selamla();
    }

    public static void main(String... args) {
        Main calis = new Main();
        calis.merhabaSoyle();
    }
}

Çıktısı;

Hello world
Salut Fred
Hola, mundo


İç içe sınıflar genel olarak bu şekilde. Umarım konu anlaşılmıştır. Anlamadığınız yerleri tekrar tekrar üstünden geçip inceleyin.

One thought on “JAVA DERSLERİ – 44 – NESTED CLASS – İÇ İÇE SINIFLAR-2

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir