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):hellom(double):5.0
