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
Ö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
nesneBoom
nesne (((Boom) inner).touchMe()
)Boom.touchMe
denir (Eğer gerçekten de geçersiz kılınmış, dökme olmaz olsun).
İlgili soru:
'Eclipse içine bir proje aldıktan...
::push_back vector) kullanır değeri, s...
Neden türetilmiş sınıftaki bir yöntemi...
Neden türetilmiş bir sınıfta geçersiz ...
özel bir sınıf oluşturma yöntemi...