Doğrudan bir sorundan çok biçimsel bir şey. Sınıfta neler olup bittiğini tam olarak düşünmediğinizi gösteriyor.
Ne static
anlama geldiğini bir düşünün :
Bu değişken sınıf düzeyinde mevcuttur, her durum için ayrı ayrı bulunmaz ve beni genişleten sınıflarda bağımsız bir varlığı yoktur .
Ne protected
anlama geldiğini bir düşünün :
Bu değişken bu sınıf, aynı paketteki sınıflar ve beni genişleten sınıflar tarafından görülebilir .
İki anlam tam olarak birbirini dışlamaz, ancak oldukça yakındır.
İkisini birlikte nerede kullanabileceğinizi görebildiğim tek durum, uzatılmak üzere tasarlanmış soyut bir sınıfa sahipseniz ve genişleyen sınıf, orijinalde tanımlanan sabitleri kullanarak davranışı değiştirebiliyorsa. Bu tür bir düzenleme büyük olasılıkla çok dağınık olur ve sınıfların tasarımında zayıflığa işaret eder.
Çoğu durumda sabitlerin herkese açık olması daha iyidir çünkü bu her şeyi daha temiz hale getirir ve insanların alt sınıflara daha fazla esneklik kazandırmasına olanak tanır. Çoğu durumda diğer her şeyden ayrı olarak, kompozisyon kalıtıma tercih edilirken, soyut sınıflar kalıtımı zorlar.
Bunun bir şeyleri nasıl bozabileceğine dair bir örnek görmek ve bağımsız bir varlığı olmayan değişkenle ne demek istediğimi göstermek için şu örnek kodu deneyin:
public class Program {
public static void main (String[] args) throws java.lang.Exception {
System.out.println(new Test2().getTest());
Test.test = "changed";
System.out.println(new Test2().getTest());
}
}
abstract class Test {
protected static String test = "test";
}
class Test2 extends Test {
public String getTest() {
return test;
}
}
Sonuçları göreceksiniz:
test
changed
Kendiniz deneyin: https://ideone.com/KM8u8O
Sınıf Test2
statik üyesi erişebilir test
gelen Test
ismi nitelemek gerek kalmadan - ama devralır değil ya da kendi kopyasını almak. Hafızadaki aynı nesneye bakıyor.
final
. Sınıflar arasında paylaşılan değişken bir statik alan kesinlikle endişelenmenize neden olur. Statik bir alanı güncelleyen birden fazla sınıf, özellikle herhangi bir korumalı alan veya yöntemin varlığı, sınıfın diğer paketlerdeki sınıflar tarafından genişletilmesi gerektiğini ima ettiğinden, muhtemelen güvenilir veya takip edilmesi kolay değildir. korumalı alanı içeren sınıfın yazarı.