# 多态
> 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