Terminolojide, Java'daki statik yöntemlerin, ikili uyumluluk bölümü 13.4.12 tarafından ima edilen bir tür geçersiz kılma ilişkisi vardır. Eğer T uzandığı S, S m() olarak bildirilirse, T.m(), T (S) 'nin T olarak bildirilmiş olmasına bağlı olarak, T veya S'deki bir yönteme başvurabilir; ve T.m() 'yi çağıran herhangi bir kodu kırmadan m()' den T'yi eklemek ya da kaldırmak tamam. (Bu, JVM invokestatic komutunun, süper sınıf zincirinde bir çeşit dinamik yöntem araması yapması anlamına gelir)
Bununla birlikte, bu bir sorun olmaktan başka bir şey değildir. Eğer T.m() 'in anlamı sessizce değişirse, bu gerçekten farklı bir yönteme işaret ediyorsa, gerçekten tehlikelidir. (Örnek yöntemler, sözleşme gerektirmez, bu yüzden sorun değil; statik yöntemlerde böyle bir anlayış yoktur.)
Bu "özellik" asla kullanılmamalıdır; dilin başlaması için etkinleştirmemeliydi.
İyi uygulama: Eğer T.m() olarak adlandırılırsak, m() T olarak bildirilmelidir; ve ilk önce tüm T.m() 'yi çıkarmadan T'den asla çıkarılmamalıdır.
Geçersiz kılınmışlar. Gizli olabilirler. – BalusC
Bu konuya bir göz atın - http://stackoverflow.com/questions/2223386/why-doesnt-java-allow-overriding-of-static-methods – adatapost
@BalusC Semantik ... Ne olursa olsun, hiç kimseyi düşünmüyorum soruyu cevapladı. – NullUserException