簡體   English   中英

為什么在Java中隱藏了不好的做法

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM