Ekim 19, 2021
11 11 11 ÖÖ
TCP nedir ? Aktarım Katmanı 2
Aktarım Katmanı Tcp Nedir
Yönlendirme Nedir 2 ?
Yönlendirme Nedir ?
Ağ Katmanı Nedir 2 ?
Ağ Katmanı Nedir ?
Veri Bağı Katmanı Nedir 2 ?
Android Studio Nasıl Kurulur ?
Veri Bağı Katmanı Nedir ?
Fiziksel Katman Nedir ?
Son Yazılar
TCP nedir ? Aktarım Katmanı 2 Aktarım Katmanı Tcp Nedir Yönlendirme Nedir 2 ? Yönlendirme Nedir ? Ağ Katmanı Nedir 2 ? Ağ Katmanı Nedir ? Veri Bağı Katmanı Nedir 2 ? Android Studio Nasıl Kurulur ? Veri Bağı Katmanı Nedir ? Fiziksel Katman Nedir ?
java

Dahili Sınıflar (Inner Classes)

Paylaşım , Takip İçin

Dahili Sınıf Nedir?

  • Java dilinde, diğer dillerde bulunan çoklu kalıtım özelliği yoktur.
  • Bu çoklu kalıtım özelliğini desteklemek amacıyla dahili sınıflar kullanılır.
  • Java çoklu kalıtımı Arayüz(Interface) ve dahili sınıflar(inner classes) ile sağlar.
  • Dahili Sınıflar sınıf içerisinde tanımlanmış sınıflar olarak düşünülebilir.
  • Dahili sınıflar 3’e ayrılabilir.
  • Dahili Üye Sınıflar
  • Yerel Sınıflar
  • İsimsiz Sınıflar

Dahili Üye Sınıflar

  • Dahili Üye sınıflar, bir sınıf içerisinde tanımlanmış sınıflardır.
  • Erişim belirleyiciler kullanılarak, dahili sınıfları üst sınıfımız içerisindeki diğer dahili sınıflara karşı kısıtlayabiliriz.
  • Fakat dahili sınıfımızın erişim belirleyicisi ne olursa olsun üst sınıf metotları dahili sınıfımıza ait tüm üye değişken ve metotlara erişebilirler.

Örnek

public class InnerClasses {

//Asal Sayıları bulan inner class

  public class Asal{

    public boolean asalSayi(int sayi) {

      int num=0;

      boolean check=false;

      if(sayi>1) {

        for (int i=2;i<sayi;i++) {

           if (sayi%i==0) {

             num++;

           }

        }

        if(num==0)

          check=true;

        else

          check=false;

     }

     return check;

   }

  }//inner class sonu
 protected class PerfectNumber{

  protected boolean isPerfect(int num) {

    int sum=0;

    boolean check;

    for (int i=1;i<num;i++) {

  if(num%i==0)

    sum+=i;

  }

    if(num==sum)

  check=true;

    else

  check=false;

    return check;

   }

 }

}
public class test {

  public static void main(String[] args) {

    //Dahili Sınıftan nesne yaratılması

    InnerClasses.Asal asal=new InnerClasses().new Asal();

    boolean sonuc=asal.asalSayi(101);

    System.out.println(sonuc);

    InnerClasses.PerfectNumber perfect=new InnerClasses().new PerfectNumber();

    System.out.println(perfect.isPerfect(8128));

  }

}

Statik Dahili Üye Sınıflar

  • Eğer dahili üye sınıfımızı static olarak tanımlarsak dahili sınıfın elemanlarına doğrudan o sınıfın adı kullanılarak erişilebilir.
  • (nesne yaratmaya gerek kalmaz.)
  • Statik dahili üye sınıflar, kendilerini çevreleyen sınıfa ait bağlantıyı (this) kaybederler.
  • Yani nesne yaratamazsınız.

Örnek

public class calculate {

 public class Bolme{

   public double bol(double a,double b) {

     return a/b;

   }

 }

 

public static class Toplama{

  public static int topla(int a,int b) {

     return a+b;

  }

 }
 public static void main(String[] args) {

   double sonuc;

   calculate.Bolme obj=new calculate().new Bolme();

   sonuc=obj.bol(12, 5);

   System.out.println(sonuc);

   sonuc=Toplama.topla(12, 9);//Nesnesiz erişim

   System.out.println((int)sonuc);

 }

}

Soyut Dahili Üye Sınıflar (Abstract Inner Classes)

  • 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) metotları override etmeleri gerekmektedir. 
  • Dahili üye sınıflara ait diğer özellikler Soyut Dahili Üye Sınıflar içinde geçerlidir.

Örnek

class Hayvan{

  abstract class Kus{

    public abstract void uc();

    public abstract void kon();

  }

}

//burada kus sınıfına ait soyut sınıf

//kullanılacaksa once bu sınıfı cevreleyen

//hayvan sınıfına ait bir nesne bulunması zorunludur

class Kartal extends Hayvan.Kus{

  public Kartal(Hayvan hv) {

    //Hayvan sınıfına ait nesnenin yapılandırıcısı

    hv.super();

  }

  public void uc() {

    System.out.println("Kartal uçuyor");

  }

  public void kon() {

    System.out.println("Kartal kondu");

  }

}
public class AbstractInnerClass {

  public static void main(String args[]) {

    Hayvan hv=new Hayvan(); //Gerekli nesne

    Kartal krt=new Kartal(hv);

    krt.uc();

    krt.kon();

  }

}



-------------------------------
Kartal uçuyor
Kartal kondu

Yerel Sınıflar

  • Yerel Sınıflar metot içerisinde tanımlanan sınıflardır.
  • Dahili üye sınıfların kendilerini çevreleyen üst sınıfları olduğunu anlattık.
  • Yerel sınıflarda ise kendilerini çevreleyen metotlar vardır.
  • Sadece bu metot içerisinde erişilebilen sınıflardır.
  • Yerel sınıflar başka sınıflardan türetilebilir veya arayüzlere (interface) erişebilir. 
  • Yerel sınıflar, erişim belirleyiciye sahip olamazlar.
  • Yerel sınıflar sadece friendly erişim belirteciyle işaretleriz.
  • Yerel sınıfların bir constructor’ı olabilir.
  • Yerel sınıflar, statik olarak tanımlanamaz. 

Örnek

interface function{

  public double kareAl(double sayi);

}

public class LocalClass {

  public double square(double num) {

  //Yerel Sınıf Tanımı

    class kareAlma implements function{

      @Override

      public double kareAl(double sayi) {

        return sayi*sayi;

      }

    }

    kareAlma obj=new kareAlma();

    return obj.kareAl(num);

  }

  public static void main(String[] args) {

    LocalClass lc=new LocalClass();

    System.out.println(lc.square(12));

  }

}

İsimsiz Sınıflar

  • İsimsiz sınıflar, isim kullanılmadan tanımlanana sınıflardır.
  • İsimsiz sınıflar başka bir sınıftan türetilmez ve başka bir arayüzü implement edemezler.
  • Ayrıca isme sahip olmadıkları için yapılandırıcı metotları (constructor) yoktur.
  • İsimsiz metotlar yer aldıkları metotların sadece final olarak tanımlanan değişkenlerine erişebilirler.
  • İsimsiz sınıflar havada oluşturulabildiklerinden dolayı birçok işlem için çok avantajlıdır, özellikle olay dinleyicilerin (event listeners) devreye sokulduğu uygulamalarda sıkça kullanılırlar. 

Örnek

interface Toplayici {

   public int hesaplamaYap();

}

public class Isimsiz {

   public Toplayici topla(final int a, final int b) {

      return new Toplayici() {

         public int hesaplamaYap() {

            // final olan yerel degiskenlere ulasabilir.

            return a + b ;

         }

      }; // noktali virgul sart

   } // topla, metot sonu
public static void main(String args[]) {

      Isimsiz Isz = new Isimsiz();

      Toplayici t = Isz.topla(5,9);

      int sonuc = t.hesaplamaYap();

      System.out.println("Sonuc = 5 + 9 = " + sonuc );

   }

} // class Isimsiz

Paylaşım , Takip İçin
0 0 votes
Article Rating

Bir Cevap Yazın

0 Yorum
Inline Feedbacks
View all comments
0
Would love your thoughts, please comment.x
()
x
HAYALİNDEKİ YAZILIM
%d blogcu bunu beğendi: