Merhaba

public class A extends B {

    @Override
    public void doInB(){
        super.doInB();
        System.out.println("doInA");
    }

    public void callSuperDoInB(){
        super.doInB();
    }

    public static void main(String[] args) {
        new A().callSuperDoInB();
    }
}

public class B {
    public B(){
        doInB();
    }

    public void doInB(){
        System.out.println("doInB");
    }
}

Sonuç şöyle:

doInB
doInA
doInB

Sorum şu:

super class-ın içinde mesela B classının constructorunda 
doInB() methodunu çağırmak istersem A classının içindekini çağıracaktır.Ancaq B classının
constructorunda B classının variablelerine ulaşıp printe vere bilirim.

Eğer ben super ile üst klasın methodunu çağıra biliyorsam nasıl oluyorda super-deki method 
override edildi ezildi diye biliyorum.Çünkü bildiğimiz gibi variable-ler hide olunur,
methodlar ise override olunur.Method override olunduysa artık o zamandan sonra öyle bir method
mevcut deyildir anlamına gelmiyormu?

soruldu: 25 Oca, 02:10

Serxan's gravatar image

Serxan
51691106107
cevap kabul oranı: 46%

üs sınıftaki metodaları virtual tanımlayarak amacına ulaşabilirsin. (edit: javada metodlar zaten virtual idi. c# ile karıştırdım. super ile çağırdığın için üst clastan gelmesi normal. bir anormalik görmedim)

(25 Oca, 06:24) Fatih Aşlamacı Fatih%20A%C5%9Flamac%C4%B1's gravatar image

Merhaba, Override edilen methodların çağrımında runtime'da objenin reference'ı degil tipi önemlidir. Oluşturulan obje A tipindedir. new A() ile olan kısım B class'ının constructorunu cagıracaktır. Costructor içerisinde doInB(); çağrımı ise objenin tipi olan A classındaki doInB(); methodunun cagrımıan neden olacaktır.

new A() ile olan çıktı ---> doInB doInA

callSuperDoInB(); ise super.doInB();'i çağıracaktır ve çıktı doInB olacaktır.

permanent link

cevaplandı: 25 Oca, 06:51

aakkus's gravatar image

aakkus
0
cevap kabul oranı: 0%

callSuperDoInB(); ise super.doInB();'i çağıracaktır ve çıktı doInB olacaktır. super-in icinden ben super-e aid olan doInB()-yi cagira bilmem garip geliyor bana.Cunki artik oyle bir method yok ki.O artik override olmush ama. super dediyim zaman B classinin objesi olushturulup onun icindenmi cagiriyor callSuperDoInB()-yi?

sorumu shoyle ozetleyeyim callSuperDoInB() methodunun calishma mekanizmasi nasil?var olmayan,override olmush bir methodu nasil cagiriyor super ile?

(25 Oca, 06:57) Serxan Serxan's gravatar image

Merhaba, callSuperDoInB() methodunu çağırabilmesi için illa o methodun override edilmesi gerekmez. Subclass olan A içerisinde super class'a ait private olmayan tüm methodları çağırabilir. Kalıtım mekanizmasına tekrar göz gezdirmen faydalı olacaktır. Ayrıca override edilmiş method, var olmayan method anlamına gelmez.

(25 Oca, 06:59) aakkus aakkus's gravatar image
Cevabınız
toggle preview

powered by BitNami OSQA