SORU
1 Mart 2012, PERŞEMBE


Neden iç sınıf özel final yöntemi geçersiz kılabilirsiniz?

Eğer anlamda son olarak özel bir yöntem olarak ilan ediyorsa ve mantıklı değil diye düşündüm merak ettim. Ama özel bir durum olduğunu hayal ettim ve kodu anlamaya yazdı:

public class Boom {

    private void touchMe() {
        System.out.println("super::I am not overridable!");
    }

    private class Inner extends Boom {

        private void touchMe() {
            super.touchMe();
            System.out.println("sub::You suck! I overrided you!");
        }
    }

    public static void main(String... args) {
        Boom boom = new Boom();
        Boom.Inner inner = boom.new Inner();
        inner.touchMe();
    }
}

Derledim ve çalıştı. "TouchMe yapmalıyım (final)" diye düşündüm ve yaptım:

public class Boom {

    private final void touchMe() {
        System.out.println("super::I am not overridable!");
    }

    private class Inner extends Boom {

        private void touchMe() {
            super.touchMe();
            System.out.println("sub::You suck! I overrided you!");
        }
    }

    public static void main(String... args) {
        Boom boom = new Boom();
        Boom.Inner inner = boom.new Inner();
        inner.touchMe();
    }
}

ve o da çalışır ve söyledi

chicout@chicout-linlap:~$ java Boom
super::I am not overridable!
sub::You suck! I overrided you!

neden?

CEVAP
1 Mart 2012, PERŞEMBE


Özel yöntemler geçersiz (özel yöntemler miras alınmaz!) olamaz Aslında, eğer son özel bir yöntem bildirirseniz ya da değil fark etmez.

, Boom.touchMe Boom.Inner.touchMe bildirdikten iki yöntem vardır ikitamamen ayrı bir yöntemsadece aynı tanımlayıcı payı oluyor. super.touchMe touchMe, daha farklı bir yöntemi ifade eder aslında Boom.Inner.touchMe diyegölgeler11* *(ve geçersiz kılar çünkü.

Bu çeşitli şekillerde ortaya konabilir:

  • Kendini keşfettiğin gibi, eğer bu yöntemleri genel olarak değiştirirseniz, derleyici çünkü şikayet edecekson bir yöntem geçersiz kılmak için çalışırken aniden.

  • Yöntemleri özel tut ve @Override ek açıklama ekleyin, derleyici şikayet eder.

  • Olarak alpian işaret eder, eğer dökme Boom.Inner nesne Boom nesne (((Boom) inner).touchMe()) Boom.touchMe denir (Eğer gerçekten de geçersiz kılınmış, dökme olmaz olsun).

İlgili soru:

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Mary Jane Tauyan

    Mary Jane Ta

    20 AĞUSTOS 2009
  • Phymec

    Phymec

    18 Temmuz 2009
  • Thom Hall

    Thom Hall

    24 Kasım 2006