Saya bingung tentang perbedaan mengesampingkan dari bersembunyi di Jawa. Adakah yang bisa memberikan rincian lebih lanjut tentang perbedaannya? Saya membaca Tutorial Java tetapi kode contoh masih membuat saya bingung.
Untuk lebih jelasnya, saya memahami mengesampingkan dengan baik. Masalah saya adalah bahwa saya tidak melihat bagaimana menyembunyikan itu berbeda, kecuali fakta bahwa yang satu ada di tingkat contoh sementara yang lain ada di tingkat kelas.
Melihat kode tutorial Java:
public class Animal {
public static void testClassMethod() {
System.out.println("Class" + " method in Animal.");
}
public void testInstanceMethod() {
System.out.println("Instance " + " method in Animal.");
}
}
Kemudian kami memiliki subclass 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();
}
}
Lalu mereka berkata:
Output dari program ini adalah sebagai berikut:
Metode kelas pada Hewan.
Metode instance di Cat.
Bagi saya, fakta bahwa memanggil metode kelas testClassMethod()
langsung dari Animal
kelas menjalankan metode di Animal
kelas cukup jelas, tidak ada yang istimewa di sana. Kemudian mereka memanggil testInstanceMethod()
dari referensi ke myCat
, jadi sekali lagi cukup jelas bahwa metode yang dieksekusi adalah yang ada di instance Cat
.
Dari apa yang saya lihat, panggilan bersembunyi berperilaku seperti menimpa, jadi mengapa membuat perbedaan itu? Jika saya menjalankan kode ini menggunakan kelas-kelas di atas:
Cat.testClassMethod();
Saya akan mendapatkan:
Metode kelas di Cat.
Tetapi jika saya menghapus testClassMethod()
dari Cat, maka saya akan mendapatkan:
Metode kelas di Animal.
Yang menunjukkan kepada saya bahwa menulis metode statis, dengan tanda tangan yang sama seperti di induk, di subkelas cukup banyak melakukan penggantian.
Mudah-mudahan saya menjelaskan di mana saya bingung dan seseorang dapat menjelaskan. Terima kasih banyak sebelumnya!