非继承关系的类之间对象类型不可以互相类型转换,只有继承关系才可以互相转换。
简单说,对象类型转换的前提要是继承关系。
对象类型转换分为:向上转型和向下转型。多态就是一种自动向上转型。
- 向上转型:子类对象用父类类型接收(多态)。
- 向下转型:父类类型转换为子类类型。
例如:
class A {
}
class B extends A {
}
class D {
}
自动向上转型:
A a = new B();
强制向下转型:
A a = new B();
B b = (B)a;
错误演示:
A a = new D();
//或
A a = new A();
D d = (D)a; //编译错误
为了避免错误的转换,我们可以在转换之前可以使用instanceof
判断是否可以转换。
public void test(A a) {if(a instanceof B) {B b = (B)a;}
}