10 Aralık 2020

Local Class & Anonymous Class

ile gökhan

Local Class

Nested class türlerimizden bir diğeri local classlardır. Local classlar bir metot içerisinde tanımlanırlar ve metot sonlandığında kapsam dışına çıkarlar. Local değişkenler gibi, local bir sınıf bildirimi metot çağrılana kadar mevcut değildir. Local classlar aşağıdaki gibi özelliklere sahiptirler:

  • Erişim değiştiriciye sahip değillerdir. ( public, protected, private )
  • Static olarak bildirilemezler ve static final alanlar dışında static değişken veya yöntemler barındırmazlar.
  • Çevreleyen sınıfın tüm alanlarına ve yöntemlerine erişimleri vardır.
  • Değişkenler final ise local değişkenlere erişebilirler.

Aşağdaki örnekte hesapla() metodu içerisinde LocalClass isimli classı tanımladık.

public class SayiYaz {

    private int uzunluk = 5;

    public void hesapla() {
        final int genislik = 20;
        class LocalClass {

            public void carp() {
                System.out.println(uzunluk * genislik);
            }
        }
        LocalClass local = new LocalClass();
        local.carp();
    }

    public static void main(String[] args) {
        SayiYaz yaz = new SayiYaz();
        yaz.hesapla();
    }
}

Anonymous Class

Anonymous Class, bir adı olmayan local classın özel bir biçimidir. Anonymous class, mevcut bir sınıfı genişletmek veya mevcut bir interface’i implement etmek için gereklidir.

Aşağıdaki örnekte bir anonymous class örneği verilmiştir. Bu örnekte, bir abstract class tanımlanmış ve bu classtan bir nesne oluşturulmuştur. Burada anonymous class tanımında isim belirtmediğimize dikkat edelim. Anoymous class aşağıdakileri barındırmalıdır :

  • new operatorü
  • Uygulanacak interface’in ve ya extend edilecek sınıfın adı.
  • Normal bir sınıf oluşturma örneği gibi parantezler {}
public class ZooGiftShop {

    abstract class SaleTodayOnly {

        abstract int dollarOff();
    }

    public int admission(int basePrice) {
        SaleTodayOnly sale = new SaleTodayOnly() {

            int dollarOff() {
                return 3;
            }
        };
        return basePrice - sale.dollarOff();
    }
}