1、对象引用赋值转换
允许将子类对象赋值给父类引用 。————父概念包含子概念!
public class A {
void test(Object obj) {
System.out.println("test(Object):" + obj );
}
void test(String str ) {
System.out.println("test(String):" + str);
}
public static void main (String[ ] args) {
A a1 = new A();
a1.test("hello");
}
}
运行结果:
test(String):hello
【思考】如果将test(String str)方法定义注释掉,则运行结果如何?
运行结果:
test(Object):hello
2、对象引用强制转换
将父类引用赋值给子类变量时要进行强制转换,强制转换在编译时总是认可的,但运行时的情况取决于对象的值。
- Object m = new String(“123”);
// 允许,父类变量引用子类对象
- String y = m;
// 不允许
- String y = (String) m;
// 强制转换,编译允许,且运行没问题
- Integer p = (Integer) m;
// 强制转换,编译允许,但运行时出错
Integer p = Integer.parse((String) m);
public class test{
static void m(double x) {
System.out.println("m(double):" + x);
}
static void m(Object obj) {
System.out.println("m(Object):" + obj );
}
public static void main (String args[]) {
m("hello");
m(5);
}
}
运行结果:
m(Object):hello
m(double):5.0