2014-02-22 51 views
0

有人可以解釋實例和方法隱藏的原因和好處,特別是我會獲得重複超類成員的優勢嗎?這不是爲了進一步確定一個階級並改進階級而繼承的遺產嗎?實例和方法隱藏:重點是?

+0

不要忘記它的名字。它不一定是相同的類型。 –

回答

1

我強烈反對。由於元素只有在靜態時才能被隱藏起來,如果你正在使用通過聲明類而不是其子類或實例來調用靜態元素的好習慣,那麼它就沒有什麼區別。

由於從Java tutorials page

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; 
     Animal.testClassMethod(); 
     myAnimal.testInstanceMethod(); 
    } 
} 

將輸出

The static method in Animal 
The instance method in Cat 

採取正如你可以看到,即使是使用相同的名稱實現的另一個靜態方法的例子,在動物中聲明的一個WASN」除非你打電話給Cat.testClassMethod();並期望得到相同的結果

它在這裏抽象繼承的想法,因爲靜態元素並沒有真正繼承,只是acessible子類的只是一個問題。

1

在通過繼承相關的類中定義具有相同簽名的靜態方法時,會發生Java方法隱藏。它確實發生在實例方法而不是,這會在這種情況下產生覆蓋。

分配兩種可能的語義它的一個必要的Java語言的設計者 - 的選擇是隱藏或覆蓋的靜態方法。

我想,爲什麼他們有藏身去了的原因是,這是很容易理解和執行。它還具有提高性能的巨大潛力,因爲可以在編譯時分派靜態方法。

總體而言,這不是一個大問題,因爲你有機會獲得隱藏的方法爲好,只要你指定被定義隱藏的靜態方法的類名。

+0

因此,它適用於靜態方法的事實並不影響繼承。 –