Java学习笔记二十六:Java多态中的引用类型转换
Java多态中的引用类型转换
引用类型转换;
1.向上类型转换(隐式/自动类型转换),是小类型到大类型的转换;
2.向下类型转换(强制类型转换),是大类型到小类型的转换;
3.instanceof运算符,来解决引用对象的类型,避免类型转换的安全性问题;
向上类型转换是没有风险的,可以类比为一个杯子里的水倒入一个壶里(当然这个壶肯定容量比杯子要大),但是向下类型转换是有风险的,这就相当于一壶水向杯子里倒,肯定会有溢出。
举一个例子;
Initail.java:
package com.test;
public class Initail {
    public static void main(String[]args){
         Dog dog = new Dog();//先用子类的引用指向这个对象
         Animal animal = dog;//自动类型提升 向上类型转换
         Dog dog2 = (Dog)animal;//向下类型转换 强制类型转换但是存在风险
         Cat cat =(Cat)animal;//1.编译时Cat类型2.运行时Dog类型所以不能执行
    }
}
运行失败:
修改后的Initial.java:
package com.test;
public class Initail {
    public static void main(String[]args){
         Dog dog = new Dog();//先用子类的引用指向这个对象
         Animal animal = dog;//自动类型提升 向上类型转换
         if(animal instanceof Dog){
         }else{
             System.out.println("无法进行类型转换 转换Dog类型");
         }
         if(animal instanceof Cat){
             Cat cat = (Cat)animal;//1.编译时Cat类型2.运行时Dog类型所以不能执行
         }else{
             System.out.println("无法进行类型转换 转换为Cat类型");
         }
    }
}
Cat.java:
package com.test;
public class Cat extends Animal{
}
Dog.java:
package com.test; //Dog对象继承于Animal类
public class Dog extends Animal{
public int age = 20; public void method(){
eat();
} }
运行结果为:

Java学习笔记二十六:Java多态中的引用类型转换的更多相关文章
- Java学习笔记二十五:Java面向对象的三大特性之多态
		
Java面向对象的三大特性之多态 一:什么是多态: 多态是同一个行为具有多个不同表现形式或形态的能力. 多态就是同一个接口,使用不同的实例而执行不同操作. 多态性是对象多种表现形式的体现. 现实中,比 ...
 - Java学习笔记二十八:Java中的接口
		
Java中的接口 一:Java的接口: 接口(英文:Interface),在JAVA编程语言中是一个抽象类型,是抽象方法的集合,接口通常以interface来声明.一个类通过继承接口的方式,从而来继承 ...
 - Java学习笔记二十四:Java中的Object类
		
Java中的Object类 一:什么是Object类: Object类是所有类的父类,相当于所有类的老祖宗,如果一个类没有使用extends关键字明确标识继承另外一个类,那么这个类默认继承Object ...
 - python3.4学习笔记(二十六) Python 输出json到文件,让json.dumps输出中文 实例代码
		
python3.4学习笔记(二十六) Python 输出json到文件,让json.dumps输出中文 实例代码 python的json.dumps方法默认会输出成这种格式"\u535a\u ...
 - Java基础学习笔记二十六 JDBC
		
什么是JDBC JDBC(Java DataBase Connectivity)就是Java数据库连接,说白了就是用Java语言来操作数据库.原来我们操作数据库是在控制台使用SQL语句来操作数据库,J ...
 - Java学习笔记(十六)——Java RMI
		
[前面的话] 最近过的好舒服,每天过的感觉很充实,一些生活和工作的技巧注意了就会发现,其实生活也是可以过的如此的有滋有味,满足现在的状况,并且感觉很幸福. 学习java RMI的原因是最近在使用dub ...
 - 【Java学习笔记之十六】浅谈Java中的继承与多态
		
1. 什么是继承,继承的特点? 子类继承父类的特征和行为,使得子类具有父类的各种属性和方法.或子类从父类继承方法,使得子类具有父类相同的行为. 特点:在继承关系中,父类更通用.子类更具体.父类具有更 ...
 - Java学习笔记二十九:一个Java面向对象的小练习
		
一个Java面向对象的小练习 一:项目需求与解决思路: 学习了这么长时间的面向对象,我们只是对面向对象有了一个简单的认识,我们现在来做一个小练习,这个例子可以使大家更好的掌握面向对象的特性: 1.人类 ...
 - Java学习笔记二十二:Java的方法重写
		
Java的方法重写 一:什么是方法的重写: 如果子类对继承父类的方法不满意,是可以重写父类继承的方法的,当调用方法时会优先调用子类的方法. 语法规则 返回值类型.方法名.参数类型及个数都要与父类继承的 ...
 
随机推荐
- js 获取URL中参数
			
function getQueryString() { var result = location.search.match(new RegExp("[\?\&][^\?\& ...
 - python 面向对象:类,作用域
			
类(Class)和实例(Instance) 定义类是通过class关键字:class Student(object): pass class后面紧接着是类名,即Student接着是(object),表 ...
 - CefSharp 浏览器核心,爬虫
			
CefSharp是什么 A framework for embedding web-browsing-like capabilities to a standard .NET application ...
 - OC基础数据类型-NSString
			
1.字符串的初始化 //字符串的初始化 NSString *str = @"Hello world!"; NSString *str2 = [[NSString alloc] in ...
 - Spring Framework5.0 学习(1)—— 用Gradle构建一个Java Project
			
1.0 安装Gradle,参考之前文章<Gradle入门实战(Windows版)> 2.0 使用gradle 快速生成一个Java project gradle init --type ...
 - 6.spring:AOP(注解)
			
spring Aop AOP面向切面编程,与OOP面向对象编程相辅相成 AOP中最基本的单元是切面 问题: 代码混乱:越来越多的业务需求(日志&验证)加入后,原有的业务方法急剧膨胀,每个方法 ...
 - 使用QT开发GoogleMap瓦片显示和下载工具(2)——Google地图瓦片投影和获取网址解析
			
这篇主要说的是Google地图采用的投影方式,瓦片划分方式以及如何从给定的经纬度获取瓦片的数据的网址.所有资料均来自于网络,并亲自试验可行. Google地图投影 首先是地图投影问题,因为地球本身是一 ...
 - 【题解】洛谷P4145 花神游历各国(线段树)
			
洛谷P4145:https://www.luogu.org/problemnew/show/P4145 思路 这道题的重点在于sqrt(1)=1 一个限制条件 与正常线段树不同的是区间修改为开方 那么 ...
 - #warning Incomplete method implementation怎么修改?
			
#warning Incomplete method implementation怎么修改? 各位朋友,我在做一个表格视图的例子,在tableview方法里总有几个warning:#war ...
 - mobBUS
			
1.今天听陈刚说起modBUS通信协议,这个还是第一次听说,究竟是什么东东,还是上网查查看吧 2.网上有C语言程序. http://blog.163.com/li_g888@126/blog/stat ...