一、基本数据类型的转换
包括自动类型转换和强制类型转换。不再赘述。
二、对象的转换
1.原因:类之间的继承性
2.对象转换(造型)包括:自动转换和强制转换。
3.自动转换(向上转换)up casting:
(1)子类对象可以自动转换为超类对象。(比如小汽车是车类的子类,小汽车a是小汽车,小汽车a也是车。)
4.强制类型转换 down cast:
(1)将一个超类对象转换成子类对象。
(2)需要使用转换运算符()。
(3)将超类对象转换成子类对象,要求超类对象是用子类构造方法生成的。
三、instanceof关键字
1.作用:测试一个实例是否是某种类型的实例,类型可以是类、抽象类、接口。
2.格式:
variable instanceof TypeName
解释:如果variable是TypeName类型或超类型的实例,返回true。
四、程序实例:
import java.util.*;
class Useful {
public void f() {}
public void g() {}
}
class MoreUseful extends Useful {
public void f() {}
public void g() {}
public void u() {System.out.println("moreuseful u");}
public void v() {}
public void w() {}
}
public class RTTI {
public static void main(String[] args) {
Useful[] x = {
new Useful(),
new MoreUseful()
};
x[0].f();
x[1].g();
((MoreUseful)x[1]).u(); // Downcast/RTTI
((MoreUseful)x[0]).u(); // Exception thrown
}
}
输出为:
moreuseful u
Exception in thread "main" java.lang.ClassCastException: class Useful cannot be cast to class MoreUseful (Useful and MoreUseful are in unnamed module of loader 'app')
at RTTI.main(RTTI.java:32)
解释:x[0]和x[1]都是useful类,但构造器不同,所以一个可以downcast,一个不行。
RTTI:运行时类型信息使得你可以在程序运行时发现和使用类型信息。
参考资料:
《Java语言程序设计》——清华大学出版社
《java编程思想》——机械工业出版社