函式覆蓋和過載區別:
1,
過載。同乙個類中。overload 條件:函式名相同,引數列表必須不同,對返回值無要求
2,
覆蓋。子類中。override
條件:函式名稱與引數列表
和返回值
完全相同
注意事項:
1,子類方法覆蓋父類方法時,子類許可權必須要大於等於父類的許可權。
2,
靜態只能覆蓋靜態,或被靜態覆蓋。
3.
過載時如果子父類中函式名稱相同,僅僅是返回值則不同絕不允許過載(編譯報錯,呼叫的不確定性)。因為過載是基於函式引數區別;
4.覆蓋時函式的宣告必須完全相同,包括返回值也必須一致。
①如果子父類函式名稱相同而引數列表不同
,則該方法就成了子類特有方法,不存在覆蓋
②如果子父類函式名稱和引數列表都相同而返回值不同,編譯不通過
如圖:父
int show(int a)
子short show(int a)
上圖②這種情況出現在子父類中
這種情況如果出現在同乙個類中就會出現呼叫的不確定性,不能實現過載,編譯也會報錯
子類覆蓋父類方法時,只能丟擲比父類更少的異常。或者是丟擲父類異常的子異常,因為子類可以解決父類的一些問題不能比父類有更多的異常,子類訪問許可權只能比父類大,不能更小。
被覆蓋的方法不能為private如果父類方法是private型,則子類不存在覆蓋,相當於子類增加了乙個新的特有方法,編譯會報錯!
父private
int show(int a)
子int show (int a)
多型時要注意的問題
父類型別的子類物件 不能訪問子類中特有方法,可以通過覆蓋來訪問子類中子父類共有方法
多型時成員的特點
成員函式:
編譯時看左邊;執行時看右邊
成員變數:編譯時和執行時都看左邊
非靜態
內部類中不能定義靜態成員,如果內部類定義了靜態成員,該內部類必須被靜態修飾
常用set(),與
get()
的意義,
this.x=x
;將區域性變數轉化為成員變數,封裝成物件在堆記憶體中,延長生命週期,
繼承
時一定要注意子類建構函式中第一行隱藏的super()
父類建構函式
子類建構函式第一行一定是呼叫父類建構函式,不宣告就預設呼叫了父類空參的建構函式。父類建構函式被複寫為有引數,空參的建構函式super()就被隱藏了。如果子類建構函式中沒有
super(引數)
宣告呼叫父類建構函式,就會編譯失敗。所以程式設計時建議應保留父類空參建構函式
多catch時父類異常一定要放在最下面
throw語句後面不能跟任何語句,因為執行不到
更多待補充.....
物件導向總結
成員變數 1.類中,方法外 2.建立物件存在與堆中,物件被 時一併消失 3.成員變數有預設值 區域性變數 1.方法中 2.呼叫方法存在於棧幀中,方法呼叫完畢隨棧幀一併消失 3.區域性變數沒有預設值 public class koo 重寫遵循 兩同兩小一大 兩同 1.方法名稱相同 2.引數列表相同 兩...
物件導向總結
物件導向 它是一種程式設計思想,一種通過多個物件之間互相協作完成功能處理流程的程式設計思路,它是相對於面向過程而言的,是面向過程程式設計思想的補充和完善,更加適用於處理複雜業務流程的系統開發。封裝 體現了物件對於敏感資料的保護特徵 繼承 體現了 的復用和功能的擴充套件 多型 體現了不同操作環境中 的...
物件導向總結
1 類與物件的區別 類是物件的抽象,物件是類的例項 2 成員變數 與 區域性變數區別 1 定義在類中 定義在方法中 2 作用在類中 作用於整個方法 3 系統自動初始化 使用前必須初始化 4 隨物件一同載入到堆中,物件無引用時銷毀 在方法呼叫時,在棧中產生一塊棧幀,方法執行完後消失3 封裝實現 1 屬...