A a = new B();//父类引用指向子类对象
new的解释:http://docs.oracle.com/javase/tutorial/java/javaOO/objectcreation.html
A是父类,B是子类,a是父类A的引用,b是子类B的引用。
相当于:
动物 a=new 狗();//这就为向上转型
a.发声(); // 对象a可以使用动物中的发声()或其他方法,但不可以调用狗的方法。
A a = new B();//父类引用指向子类对象
有如下形式:
a.w=1234;//如果w是子类B新增的成员变量,父类引用不能对其进行操作
a.f();
a.m();//如果m()是子类B新增的成员方法,父类引用不能对其进行操作
A a = new A();//父类引用实例化父类对象
动物 a= new 狗();狗 b = (狗)a;//这里是向下转型
B b = a;因为a是父类A的引用,此时是大类型转换为小类型(相当于:动物就是狗)即向下转型,这样的转换有风险,所以要用到强制转换来实现。
B b = (B)a;//强制转换
这时b可调用动物类未被重写的方法和狗类所有方法(包括重写动物类的方法)
向上转型都会成功,是安全的。 就像说狗是动物没问题。但通过b若调用 动物 或 狗类中任意方法都报异常,也就是说向下转型可能会出错, 不能说动物是狗,所以用到强制转换来实现动物是狗。