—- 赋值转换、强制转换

1、对象引用赋值转换

允许将子类对象赋值给父类引用 。————父概念包含子概念!

  1. public class A {
  2. void test(Object obj) {
  3. System.out.println("test(Object):" + obj );
  4. }
  5. void test(String str ) {
  6. System.out.println("test(String):" + str);
  7. }
  8. public static void main (String[ ] args) {
  9. A a1 = new A();
  10. a1.test("hello");
  11. }
  12. }
  13. 运行结果:
  14. test(String):hello
  15. 【思考】如果将test(String str)方法定义注释掉,则运行结果如何?
  16. 运行结果:
  17. test(Object):hello

2、对象引用强制转换

将父类引用赋值给子类变量时要进行强制转换,强制转换在编译时总是认可的,但运行时的情况取决于对象的值。

  1. Object m = new String(“123”);

// 允许,父类变量引用子类对象

  1. String y = m;

// 不允许

  1. String y = (String) m;

// 强制转换,编译允许,且运行没问题

  1. Integer p = (Integer) m;

// 强制转换,编译允许,但运行时出错
Integer p = Integer.parse((String) m);

  1. public class test{
  2. static void m(double x) {
  3. System.out.println("m(double):" + x);
  4. }
  5. static void m(Object obj) {
  6. System.out.println("m(Object):" + obj );
  7. }
  8. public static void main (String args[]) {
  9. m("hello");
  10. m(5);
  11. }
  12. }
  13. 运行结果:
  14. m(Object):hello
  15. m(double):5.0