1. 程式人生 > >海天醬油代理科普:你不知道的Java重寫

海天醬油代理科普:你不知道的Java重寫

重寫:兩個方法有相同的名稱和相同的引數,其中一個方法位於子類,另一個方法位於這個子類的父類中。重寫讓子類可以在父類的基礎上實現跟你更多的功能,或者實現自己的功能。
多說兩句,重寫是針對方法的,針對成員變數的重寫有試過嗎?
案例
看一下下面的程式碼,猜一下執行的結果是什麼。
class Super {
String s = 老;
public String bark(){
return s;
}
}
class Sub extends Super {
String s = 兒子;
@Override
public String bark() {
return s;
}
}
public class FieldOverriding {
public static void main(String[] args) {
Sub c1 = new Sub();
System.out.println(c1.s);
System.out.println(c1.bark());
Super c2 = new Sub();
System.out.println(c2.s);
System.out.println(c2.bark());
}
}
定義:在一個類中,成員變數的名稱和父類相同的時候會隱藏父類的成員比那裡,儘管型別不同。在子類中,父類的成員變數不能通過變數名字來引用。只能,通過它的父類來訪問。
最後:我們不建議這麼做,這樣會讓程式碼閱讀變得困難。
執行結果:
兒子 // c1.s
兒子 // c1.bark()
老 // c2.s
兒子 // c2.bark
分析
c1和c2是相同的物件,也就是相同的class,但是c2.s為父類的內容,意味著父類和子類的成員變數都是存在的。
我們也可以這樣訪問:
((Super) c2).s //注意這裡的Super不是Java的關鍵字。
額外
重寫和過載都會放在一起唄提到,初學者也經常弄混淆兩者的概念。
過載:兩個或更多個有相同的名稱,但是有不同的引數。(引數個數不同,引數型別不同),與方法的返回值無關,與許可權修飾符無關。型別,個數,順序
最後
這個概念在Java的官方文件中有提到,想把Java搞明白,海天味業建議還是要閱讀官方文件,最一手的資料。