[英]Why is hiding a bad practice in Java
好吧,問題不在於什么是方法或變量隱藏。 問題是為什么不鼓勵使用它。
如果某個人沒有靜態和動態綁定,那么一切似乎都是合乎邏輯的。 我同意應該通過類Name而不是對象引用來調用靜態變量和方法,以使代碼易於理解,但是為什么不鼓勵這種隱藏行為呢?
僅僅是因為這樣使代碼變得更易於閱讀還是其他原因?
覆蓋靜態方法沒有任何意義,因為覆蓋雖然是針對多態性的事情,但是當您調用該方法時,您不是在操縱對象而是在操縱類。 因此,可能需要您以非靜態方式執行它,並且您將受聲明的變量類型的約束,而不是它的實例的約束。
我實際上對這里的文檔非常滿意(感謝@baao): https ://docs.oracle.com/javase/tutorial/java/IandI/override.html。
注意隱藏和壓倒一切的區別: -隱藏指的是一個靜態方法具有相同簽名的超類中的靜態方法的子類,被認為是不好的做法-重寫是什么讓子類來修改繼承的行為,是不壞的做法。
我將再次從文檔中使用該示例:
public class Animal {
public static void testClassMethod() {
System.out.println("The static method in Animal");
}
public void testInstanceMethod() {
System.out.println("The instance method in Animal");
}
}
public class Cat extends Animal {
public static void testClassMethod() {
System.out.println("The static 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;
myAnimal.testClassMethod();
// "The static method in Animal"
myAnimal.testInstanceMethod();
// "The instance method in Cat"
}
}
還要從Java中隱藏的方法中引用另一個答案。 甚至JavaDoc的解釋也令人困惑 :“在實例而不是類上調用靜態方法是非常糟糕的做法,絕不應該這樣做。”
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.