A 類別程式中, f() 及 g() 這二個方法, 因宣告為 private, 在繼承的關係中是不會被繼承, 所以根本沒覆蓋的討論, 下面程式範例, 編譯會過, 既使 B 類別程式中有相同宣告的 f() 及 g() 這二個方法
class A {
// Identical to "private" alone:
private final void f() {
System.out.println("A.f()");
}
// Also automatically "final":
private void g() {
System.out.println("A.g()");
}
}
class B extends A {
private final void f() {
System.out.println("B.f()");
}
private void g() {
System.out.println("B.g()");
}
}
在繼承關係中, 變數是沒有覆蓋 (Override) 的討論, 而是以 shadow 來討論, 以下範例程式, 編譯是會通過, 因沒有覆蓋討論, I 介面中的變數 KEY 既使宣告 final, A 類別一樣可以宣告同名的變數 KEY.
public interface I {
public final String KEY = "a";
}
public class A implements I {
public String KEY = "b";
public String getKey() {
return KEY;
}
}
參考文章
1. Why can final constants in Java beoverriden ?
http://stackoverflow.com/questions/205239/why-can-final-constants-in-java-be-overriden
2011年8月16日 星期二
訂閱:
張貼留言 (Atom)
No Response to "private final 方法可以被覆蓋 (Override)"
張貼留言