# 多態
> Java引用類型變量有兩種類型:一種是編譯時的類型,一種是運行時的類型。
* 編譯的類型是由聲明變量的時候決定的。
* 運行時類型由實際賦給該變量的對象決定。
如果運行時的類型和編譯時的類型不一致就會出現所謂的多態。
- 首先編譯時類型和運行時類型是一種父類和子類的關系。
- 多態最常用的場景就是子類重寫父類的方法后,如果引用變量的類型為父類,而對象為子類,如果引用類型調用重寫方法,會去執行子類定義的實現。
## 引用類型的強制類型轉換
編寫Java程序時,引用變量只能調用他編譯時的方法,而不能調用其運行時類型的方法。如果你必須要調用其運行時的類型,則需要進行強制類型轉換。
強制類型轉換是把大的類型轉換為小的類型。
在我們的引用數據里,大的類型是父類,小的類型是子類。
只可能發生在子類和父類的關系中
## instanceof運算符
instance運算符的前一個操作數一般是引用數據類型變量,后一個操作數是類名(接口),它是用于判斷前面的對象是否是后面的類、或者其子類。如果是的話,返回true。
> instanceof運算符一般用于在我們對引用數據類型進行強制類型轉換之前判斷使用。
> 避免在實際的運行過程中出現 ClassCastException
實例代碼:
~~~
public class Client1 {
public static void main(String[] args) {
Animal tom = new Dog();
Animal mimi = new Cat();
Animal ani1 = new Animal();
if (ani1 instanceof Dog) { // 此處ani1的數據類型為 Animal 所以運算的結果為 false
Dog dog1 = (Dog) ani1;
System.out.println(dog1.getAge());
}
if (tom instanceof Dog) { // 此處tom運行時數據類型為 Dog 所以運算的結果為 true,可以進行轉換
Dog dog2 = (Dog) tom; // 強制類型轉換
dog2.setAge(20);
System.out.println(dog2.getAge());
}
tom.cry();
mimi.cry();
}
}
~~~
- 前言
- 計算機概論
- 數據庫
- 數據庫介紹
- 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簡單實現
- 表基本操作
- 優化配置文件
- 表字段名與實體類屬性名不同的解決方案
- 一對一關聯
- 一對多關聯
- 教學管理
- 學員名錄
- 周測統計
- 2017-10-27
- 2017-11-03
- 2017-11-10
- 2017-11-17
- 課堂作業
- 班會紀要
- 2017-10-24
- 缺勤記錄
- 班級備忘錄
- 違紀統計
- 編程素養
- Day001
- Day002
- Day003
- Day004
- Day005
- Day006
- Day007
- Day008
- Day009
- Day010
- Day011
- Day012
- Day013
- Day014
- Day015
- Day016
- Day017
- Day018
- Day019