Java-对象转换和instanceof
要点提示:对象的引用可以类型转换为另外一种对象的引用,这称为对象转换。
对象转换
隐式转换
Object o = new Student();
Student类是Object类的一个子类
向上转换(upcasting)
总是可以将一个子类的实例转换为一个父类的变脸,称为向上转换,因为子类的实例永远是它的父类的实例。(不需要使用转换记号”(子类名)”)
向下转换(downcasting)
当把一个父类的实例转换为它的子类变量(称为向下转换)时,必须使用转换记号”(子类名)”进行显式转换,向编译器表明意图。
为使转换成功,必须确保要转换的对象是子类的一个实例。如果父类对象不是子类的一个实例,就会出现一个运行异常ClassCastException.
instanceof
instanceof 是java中的关键字
用法:
(A和B都是对象)
A instanceof B //用来确定A是不是B的一个实例
⚠️
*注意 *
对象成员访问运算符(.)优先于类型转换运算符。所以使用圆括号保证在点运算符(.)之前进行转换,例如:
((Circle)object).getArea();
另外,对基本类型值进行转换不同于对对象引用进行转换。转换基本类型值返回一个新的值,例如:
int age = 45;
byte newAge = (byte)age;// A new value is assigned to newAge
而转换一个对象引用不会创建一个新的对象。例如:
Object o = new Circle();
Circle c = (Circle)o; // No new object is created
现在,引用变量o和c指向同一个对象。