Java - Kalıtım #4 - Methodu Ezmek

Salı, Mayıs 12, 2015 kustemura 0 Yorum


Bir sınıf hiyerarşisinde , alt sınıfa ait bir method üst sınıfında ki bir method ile aynı tipe ve ada sahipse ve böyle bir method çağrıldığında her zaman methodun alt sınıf tarafından tanımlanan versiyonuna başvurulur.Üst sınıftaki method gizlenmiş olur.Bunu bir örnek ile inceleyelim.
class A {
 int i, j;

 A(int a, int b) {
  i = a;
  j = b;
 }

 void show() {
  System.out.println("i = " + i + " j = " + j);
 }

}

class B extends A {
 int k;

 B(int a, int b, int c) {
  super(a, b);
  k = c;
 }

 void show() {
  System.out.println("k = " + k);
 }
}

class Override {
 public static void main(String args[]) {
  final B subClone = new B(5, 10, 15);
 }
}
Programın Çıktısı :
k = 15
B tipinde oluşturulan bir nesne üzerinden , show() methodunu çağırdığımızda B içinde tanımlı olan show() methodu çağrılır , çünkü show()'un B içerisinde ki versiyonu A içerisindeki versiyonu ezer.(Override)Yine ezilen versiyona ulaşmak için super kullanılır.
class A {
 int i, j;

 A(int a, int b) {
  i = a;
  j = b;
 }

 void show() {
  System.out.println("i = " + i + " j = " + j);
 }

}

class B extends A {
 int k;

 B(int a, int b, int c) {
  super(a, b);
  k = c;
 }


 void show() {
  super.show();
  System.out.println("k = " + k);
 }
}

class Override {
 public static void main(String args[]) {
  final B subClone = new B(5, 10, 15);
 }
}
Programın Çıktısı : 
i = 5 j = 10
k = 15
Method ezmesi sadece aynı adı ve tip imzasını taşıması durumunda geçerlidir.Aksi takdirde bir method ezmesi değil , aşırı yüklenme oluşur.Bunu bir örnekle açıklayayım.
class A {
 int i, j;

 A(int a, int b) {
  i = a;
  j = b;
 }

 void show() {
  System.out.println("i = " + i + " j = " + j);
 }

}

class B extends A {
 int k;

 B(int a, int b, int c) {
  super(a, b);
  k = c;
 }

 void show(String msg) {

  System.out.println(msg + k);
 }
}

class Override {
 public static void main(String args[]) {
  final B subClone = new B(5, 10, 15);
  subClone.show("k adında bir değişken = ");
  subClone.show();
 }
}
Programın Çıktısı :
k adında bir değişken = 15
i = 5 j = 10
Burada B içerisinde ki show() methodu , A içerisindeki show() methodunu aşırı yüklemiştir.

0 yorum :