# 類的繼承
繼承是面向對象的三大特性之一,也是實現軟件復用的重要手段。
Java中是單繼承,每個子類只有一個直接父類。有的時候把父類也成為基類或者超類。
## 繼承的特點
> 父類和子類是一種一般和特殊的關系。例如水果和蘋果,蘋果是一種特殊的水果。
在Java中定義子類繼承父類的語法為
~~~
[修飾符] class SubClass extends SuperClass {
// 類定義部分
}
~~~
extends字面解釋為擴展,其實就是子類除了擁有父類所有的成員變量和方法之外,還具備自己的特殊屬性。
> 在子類中是不能訪問父類中定義的private相關的成員變量和方法的,這點也完全符合private的使用方式。
## 重寫父類的方法
在子類中包含與父類同方法簽名的現象稱為「方法重寫(Override)」,有時也稱為方法覆蓋。我們可以說子類重寫了父類的方法,也可以說子類覆蓋了父類的方法。
> 方法簽名:包含方法名、形參列表。
子類重寫方法的意義:子類繼承了父類之后,調用父類的方法,就不需要重復寫,節省代碼量。
如果使用條件變更,父類的方法不能滿足使用需求,那么就需要重寫方法了,把父類的方法覆蓋掉。重寫,也能實現代碼的多樣性。就好比父親和兒子的關系,兒子會繼承父親的所有特性,但是兒子也可以自己發展。
> 重寫父類方法需要遵循的規則:
> 返回值和訪問控制修飾符可以不一樣,但是要符合“兩同兩小一大原則”
> 作為兩同就是方法名和方法的參數列表相同
> 兩小:子類的返回值類型和拋出的異常類要比父類的返回值類型和拋出的異常類更小或者相等。這里說的返回值類型小值指的是子類和父類的關系。
> 一大:子類的訪問權限要比父類的訪問權限要大或者相等
## super限定
super的使用和this的使用很相似。
如果需要在子類中調用父類被覆蓋的方法,可以使用super關鍵字。
同樣也可以通過super.fun()調用沒有被覆蓋的方法,但是這樣寫沒有什么特別的意義,因為本身在子類中就可以直接調用,無需使用super關鍵字。
## 關于繼承的幾點說明
子類能夠繼承父類的信息包括:
* 沒有使用private修飾符修飾的成員變量和方法,子類都能夠繼承
* 子類重寫了父類的方法,則父類的方法會被隱藏,隱藏的方法或者成員變量可以通過super關鍵字進行訪問
* 引入super關鍵字的原因是可以訪問被隱藏的成員變量和屬性,而且super只能在子類的方法定義中使用。
## 調用父類的構造器
> 在Java的世界里,所有的類都是Object類的子類。
在子類的構造器中,無論如何在第一行語句中都會調用一次父類的構造器。
如果沒有顯式的調用,那么會調用父類的沒有參數的構造器,如果父類沒有定義空參數的構造器,則此時會無法編譯。
對象創建的過程就是調用對象類的構造器的過程,一個構造器最基本的組成
~~~
[修飾符] 類名 {
super(...); 調用父類的構造器,如果沒有會調用父類的無參構造器
}
~~~
super()必須出現在第一行,而且只能有一個。
this和super在同一構造器中只可能出現一次。
子類構造器調用父類構造器可能出現的情況有
* 子類構造器執行體的第一行顯式的使用super調用父類的構造器,此時系統將根據super(params)調用對應的構造器。
* 子類構造器執行提的第一行顯式的使用this調用重載的構造器,系統將根據this(params)調用對應的重載構造器,本類中的對應的構造器再去調用父類的構造器。
* 子類構造器中既沒有super又沒有this,子類在執行構造器語句前執行父類的無參構造器。
* 無論如何子類都會調用一次父類的構造器。
> 在實際的開發過程中,我們一般都會保證在一個類中有一個無參的構造器的存在。因為如果在其類的子類中沒有定義構造器,或者定義了構造器沒有顯式的去調用父類的構造器,子類也能被成功的編譯。
- 前言
- 計算機軟件概論
- HTML基礎
- Web原理和HTML簡介
- Web原理
- HTML概念
- HTML標簽
- 標簽
- HTML固定基本結構
- 第一個HTML頁面
- 工具的使用
- 標題
- <hr>和<p>標簽
- 路徑概念
- 超級鏈接
- 列表
- 表格
- 表單的設計與使用
- 表單域的原理
- 文本框和密碼框
- 單選框和復選框
- 下拉列表框
- 多行文本和上傳
- 提交按鈕和重置按鈕
- 為CODING COFFEE加入在線購買頁
- HTML5
- 定位服務
- CSS
- CSS的基礎使用
- CSS簡介
- CSS樣式規則和加載方式
- 選擇器
- 偽類
- CSS優先級和層疊
- CSS顏色
- 背景圖片
- 文本
- CSS列表
- DIV+CSS布局
- 內聯元素和區塊元素介紹
- Display屬性
- 盒子模型的邊距和邊框
- 浮動和清除浮動
- 用Position屬性進行定位
- 專題:居中和對齊
- CSS新特性
- CSS3邊框
- 動畫
- JavaScript基礎
- Hello World!
- 語句和變量
- 一切皆對象
- 標識符、注釋和區塊
- 基本數據類型和引用數據類型
- 語句
- 條件語句
- 循環語句
- 數據類型
- typeof
- number
- 字符串
- 布爾類型
- 函數
- 數組
- 運算符
- 加法運算符
- 算術、賦值、比較運算符
- 布爾運算符
- DOM模型
- DOM和DOM節點
- 特征相關屬性
- 節點對象的方法
- Element對象
- Attribute對象
- Text節點和CSS操作
- 事件模型
- 標準庫
- Number對象
- String對象
- Array對象
- Date、Boolean和Math對象
- JSON對象
- 面向對象編程中的 this
- Web Storage
- 錯誤處理機制
- Error對象和try..catch語句
- javascript的原生錯誤類型
- BOM模型
- window對象
- 計時事件
- jQuery基礎
- 認識jQuery
- jQuery對象和DOM對象
- jQuery選擇器
- jQuery Dom操作
- 查找節點和創建節點
- 插入節點和刪除節點
- 復制節點和替換節點
- 包裹節點和屬性操作
- 樣式操作
- 設置和獲取HTML、文本和值
- 遍歷節點和CSS操作
- jQuery 事件和動畫
- 事件綁定與冒泡處理
- jQuery動畫
- jQuery 插件
- validate 插件
- jQuery與Ajax的應用
- Ajax簡介
- jquery中的Ajax
- Bootstrap基礎
- 起步
- 柵格系統
- 排版樣式
- 表格和按鈕
- 表單和圖片
- 輔助類和響應式工具
- 圖標菜單按鈕組件
- 輸入框和導航組件
- 路徑、分頁、標簽和徽章組件
- 巨幕、頁頭、縮略圖和警告框
- 進度、條媒體對象和Well組件
- 列表組和嵌入組件
- 數據庫
- 數據庫介紹
- MySQL的安裝
- SQL
- 表基本操作
- 修改數據語句
- 數據檢索操作
- 多表數據操作
- 表結構設計
- 綜合應用
- JAVA
- JAVA 介紹
- JAVA 運行原理
- JDK 配置
- 類和對象
- 數據類型
- 變量
- 直接量
- 運算符
- 流程控制
- 數組結構
- 面向對象
- 隱藏和封裝
- 深入構造器
- 類的繼承
- 多態
- 包裝類
- final 修飾符
- 抽象類
- 接口
- 集合框架
- 常用類學習
- 設計模式-單例模式
- 異常處理
- JDBC
- JSP&Servlet
- Web應用
- Tomcat
- JSP
- Scriptlet
- Page 指令
- 包含指令
- 跳轉指令
- 用戶注冊實例
- JSP練習
- 內置對象
- Servlet
- 過濾器
- Web分層思想
- EL表達式
- JSTL
- 分頁實現
- AJAX&JSON
- 開發步驟
- 路徑問題
- Log4j
- Java高級
- 文件操作
- 泛型
- 類加載機制和反射
- 注解 Annotation
- Mybatis框架
- 框架介紹
- Mybatis簡單實現
- 表基本操作
- 優化配置文件
- 表字段名與實體類屬性名不同的解決方案
- 一對一關聯
- 一對多關聯
- Spring框架
- Spring簡介
- IOC控制反轉
- AOP面向切面編程
- SpringMVC框架
- 教學管理
- 學員名錄
- 周測統計
- 2018-04-20
- 2018-04-27
- 2018-05-11
- 2018-05-18
- 2018-06-23
- 課堂作業
- 缺勤記錄
- 默寫記錄