博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
java中对象的类型转换
阅读量:3890 次
发布时间:2019-05-23

本文共 1613 字,大约阅读时间需要 5 分钟。

在多态中涉及到将子类对象当做父类对象使用的情况,例如下边两行:

Animal dog=new Dog();        Animal cat=new Cat();

将子类对象当做父类对象使用不需要任何显式的声明,但是需要注意的是,有些时候不能通过父类变量去调用子类的某些方法,下面举一个代码示例

interface Animal{	void shout();}class Cat implements Animal{	public void shout(){		System.out.println("喵喵,,,,");	}	void sleep(){		System.out.println("猫在睡觉,,,,");	}}public class Main {		public static void main(String[] args) {		Cat cat=new Cat();		animalShout(cat);	}	public static void animalShout(Animal an){		an.shout();		an.sleep();	}}

上边这个程序在创建Cat类的对象cat之后调用了animalShout方法,但是这个方法的参数类型是Animal类型的,这个时候程序就会自动将cat转换为Animal类型的。但是在Animal接口中并没有定义sleep这个方法,这个是在Cat中定义的,这个时候就需要强制转换类型了,具体如下:

public static void animalShout(Animal an){		Cat an1=(Cat) an;//这一句就是用来强制转换的,格式为:新类型  新名称=(新类型) 老名称		an1.shout();		an1.sleep();	}

将最上方的例子中的animalShout方法修改为这样,程序就不会报错,原因是在这个修改后的方法中的第一行就已经通过强制转换修改了对象的类型

 

但是如果在animalShout方法中传入一个Dog对象,程序一样会报错,原因是Cat是Animal的子类,而Dog并不是。这个时候就需要一个关键字判断一个对象是否为某个类(或者接口)的实例化对象啦,这个关键字就是instanceof

代码举例:

interface Animal{	void shout();}class Cat implements Animal{	public void shout(){		System.out.println("喵喵,,,,");	}	void sleep(){		System.out.println("猫在睡觉,,,,");	}}class Dog implements Animal{	public void shout(){		System.out.println("汪汪,,,,");	}	void sleep(){		System.out.println("狗在睡觉,,,,");	}}public class Main {		public static void main(String[] args) {		Dog cat=new Dog();		animalShout(cat);	}	public static void animalShout(Animal an){		if(an instanceof Cat){			Cat an1=(Cat) an;		    an1.shout();		    an1.sleep();		}else{			System.out.println("this animal not a cat");		}	}}

这个样例的运行结果是this animal not a  cat    原因是传入到animalShout方法中的对象是Dog类型的并不是Cat类型,

转载地址:http://gkohn.baihongyu.com/

你可能感兴趣的文章
Shell之导出数据库的表为Excel的脚本
查看>>
Shell之预启动脚本
查看>>
WebKit之Node的继承关系图
查看>>
WebKit之RenderObject继承关系图整理
查看>>
WebKit之JSCell的继承关系图
查看>>
WebKit之HTMLTreeBuilder类的解析框架
查看>>
WebKit之HTMLConstructionSite类组成
查看>>
Linux之so加载原理分析
查看>>
C之基于signal信号的交互式的测试功能模块(触发时机)
查看>>
Linux之libevent的编译&测试
查看>>
Linux之kc.cfg文件参数详解
查看>>
MySql之简单SQL用法整理
查看>>
PHP之thinkphp的数据库操作代码段汇总
查看>>
Linux之tcpdump用法汇总整理
查看>>
Linux之tcp的结构分析
查看>>
WebKit之WebSocket模块的代码层初步分析
查看>>
WIFI之Agent调度关系
查看>>
WIFI之升级协议列表
查看>>
MCU之STM32可用硬件(外部接口)一览表
查看>>
MySql之设备管理的数据表设计列表
查看>>