Java强制类型转换的理解

在Java中的强制类型转换和C语言中还是有一些区别的;
进行类型转换的唯一原因是: 在暂时忽视对象的实际类型之后, 使用对象的全部功能。
比如,我们可以定义一个父类的对象,然后引用某一个子类的对象,但是此时这个对象是不能直接访问子类的私有方法,如果想要访问子类的方法,需要用强制类型转换,如下:

//假若父类对象占1M的内存,因为子类对象有一些其他内容,所以多占用0.5M内存,子类对象一共占1.5M内存
People[] staff = new People[2];//这里我们定义了一个父类的对象,可以指向1M内存;
staff[0] = new RichPeople("John", 18, 100,1200);//开辟了1.5M内存,但是实际只指向了1M内存
staff[1] = new RichPeople("Tp",20,200,20000);
if(staff[0] instanceof RichPeople){//判断staff[0]是否是RichPeople的实例
	//先创建一个boss实例做暂存,把staff[0]做强制类型转换
	//因为boss的引用就是staff[0],所以对boss的操作就是对staff[0]的操作
	RichPeople boss = (RichPeople)staff[0];
	boss.addDeposit(10000);
	//也可以这样写:
	//((RichPeople)staff[0]).addDeposit(10000);
	//((RichPeople)staff[0])可以看做是创建了一个RichPeople类的匿名对象(等效于上面的boss)
	//这个匿名对象的引用和RichPeople类型的staff[0]是相同的	
}

######总结一下,强制类型转换可以理解为,强制类型转换可以把一个原本指向大内存的对象,改为指向某个小内存的对象,但是不能把一个原本为小内存的对象,转换成一个大内存对象,如果想这么做,需要用暂存对象或者匿名对象;

猜你喜欢

转载自blog.csdn.net/qq_33982232/article/details/82826701