Java'da saklanmaktan geçersiz kılmanın ne kadar farklı olduğu konusunda kafam karıştı. Bunların nasıl farklılaştığı konusunda daha fazla ayrıntı verebilir mi? Java Eğitimi'ni okudum ama örnek kod hala kafamı karıştırdı.
Daha açık olmak gerekirse, geçersiz kılmayı iyi anlıyorum. Benim sorunum, birinin örnek düzeyinde, diğerinin sınıf düzeyinde olması dışında, gizlemenin ne kadar farklı olduğunu görmüyorum.
Java eğitim koduna bakın:
public class Animal {
public static void testClassMethod() {
System.out.println("Class" + " method in Animal.");
}
public void testInstanceMethod() {
System.out.println("Instance " + " method in Animal.");
}
}
Sonra bir alt sınıfımız var Cat
:
public class Cat extends Animal {
public static void testClassMethod() {
System.out.println("The class method" + " in Cat.");
}
public void testInstanceMethod() {
System.out.println("The instance method" + " in Cat.");
}
public static void main(String[] args) {
Cat myCat = new Cat();
Animal myAnimal = myCat;
Animal.testClassMethod();
myAnimal.testInstanceMethod();
}
}
Sonra derler:
Bu programın çıktısı aşağıdaki gibidir:
Hayvanda sınıf yöntemi.
Cat'deki örnek yöntemi.
Bana göre, bir sınıf yöntemini testClassMethod()
doğrudan sınıftan çağırmanın sınıftaki yöntemi Animal
yürüttüğü Animal
oldukça açık, burada özel bir şey yok. Daha sonra testInstanceMethod()
from a referansı çağırırlar myCat
, bu yüzden o zaman yürütülen yöntemin örneğindeki yöntem olduğu oldukça açık Cat
.
Gördüğüm kadarıyla, aramayı gizleme, geçersiz kılma gibi davranıyor, öyleyse neden bu ayrımı yapalım? Bu kodu yukarıdaki sınıfları kullanarak çalıştırırsam:
Cat.testClassMethod();
Alacağım:
Cat'deki sınıf yöntemi.
Ama eğer Cat'i kaldırırsam şunu testClassMethod()
elde ederim:
Animal'daki sınıf metodu.
Bu da bana, bir alt sınıfa, üst sınıfta olduğu gibi aynı imzaya sahip statik bir yöntem yazmanın, geçersiz kılma anlamına geldiğini gösteriyor.
Umarım nerede kafamın karıştığını netleştiriyorum ve birileri biraz ışık tutabilir. Şimdiden çok teşekkürler!