你不知道的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搞明白,還是要閱讀官方文件,最一手的資料。
有沒有覺得這個知識點很偏呢...
參考:
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/3016/viewspace-2802849/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 重構:你可能不知道的重構場景
- 你不知道Java的10件事Java
- java之方法的重寫Java
- ?你不知道的Java內部類Java
- java方法的神奇修改(重寫)Java
- Java String之你不知道的事Java
- 關於 Java 你不知道的 10 件事Java
- vuex1.0你不知道的簡單寫法Vue
- java -繼承 -重寫Java繼承
- java 方法重寫概念Java
- Java核心(四)你不知道的資料集合Java
- Java Spring 中你不知道的注入方式JavaSpring
- 你不知道的javascript,你不知道的奧祕JavaScript
- Java中的過載和重寫Java
- 你不知道的JavaScript用法 Hacker是這樣寫JS的JavaScriptJS
- 【JAVA】重寫和過載Java
- java 重寫知識點Java
- 關於Java序列化你不知道的事Java
- 重讀你不知道的JS (上) 第一節一章JS
- 重讀你不知道的JS (上) 第一節四章JS
- 程式碼重構,你所不知道的二手程式碼
- Java 面試題關於方法的重寫Java面試題
- Java—重寫與過載的區別Java
- java 新建立的類要重寫的方法Java
- java 中為什麼重寫 equals 後需要重寫 hashCodeJava
- Java入門系列之重寫Java
- java~重寫hashcode和equalsJava
- 你所不知道的Java效能優化之String!Java優化
- Java重寫equals方法時為什麼要重寫hashcode方法Java
- 你不知道的 WebSocketWeb
- 你不知道的CSSCSS
- 你不知道的JavaScriptJavaScript
- java中過載與重寫的區別Java
- 可笑,你竟然不知道 Java 如何生成 UUIDJavaUI
- 入行IT為啥建議首選Java?小白學Java你不知道的理由Java
- 還重構?就你那程式碼只能鏟了重寫!
- 重寫Java的String及其大部分方法Java
- Java 重寫方法與初始化的隱患Java