概述
文章目录
- 对java强制类型转换的一些理解
- 概述
- 问题的提出
- 想法的验证
对java强制类型转换的一些理解
概述
qquad 从我这个编程小白来看,java的强制类型转换并不常用。不同于C/C++语言,可以进行int,double等类型之间的强制转换,java是不支持一下格式的:
double a = 3.14;
int b = (int)a;
qquad 并且,java编程中的很多对象之间并没有什么关系,贸然进行强制类型转换很容易使程序抛出异常并终止;一般情况下,只会在对equals方法进行override时才会用到强制类型转换。较少且固定的使用使我们对这个过程的本质并不了解,我们掌握的只是一些固定的用法。只有在遇到一些不能理解的结果时,才会静下心来寻找问题的根源。
问题的提出
我们来看下面这个例子:
class A{
public A(){}
void foo(){
System.out.println("A.bar");
}
}
class B extends A{
public B(){}
@override
void foo(){
System.out.println("B.bar");
}
}
public class test{
public static void main(String[] args){
B b = new B();
((A)b).foo();
}
}
qquad 开始时我以为打印的结果可能是"A.bar",毕竟已经强制类型转换成了A类型的对象,但实际上打印出来的却是"B.bar".
我就开始思考强势类型转换的机制。而这个无外乎有三种可能:
- 只是将引用转换为A类型
- 只是将对象转换为A类型
- 将引用和对象均转换为A类型
想法的验证
qquad 从理论上来看,第二,三种猜想不成立。根据Java override机制可知,如果对象转换的话,那么b在调用函数时会根据实际的对象来进行选择。所以,如果后两种猜想成立的话,最后打印出来的应该是"A.bar"。而getClass函数可以获得object的引用类型,调用此函数并打印,得到A。故第一种猜想成立。
最后
以上就是大胆向日葵为你收集整理的对java强制类型转换的一些理解的全部内容,希望文章能够帮你解决对java强制类型转换的一些理解所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复