java继承求助!!!急

来源:百度知道 编辑:UC知道 时间:2024/06/04 16:43:27
假设有两个类A和B,其中B是A的子类,请问为什么以下的语句错误呢:
B b=new A();
三楼的大哥真强,谢谢!我还想请教一下为什么不直接用
A b=new A();而有时用A b=new B();呢?

补充:这个问题就是涉及到设计模式和安全性的问题.建议你参考一下相关资料.
========================
java语言是向下兼容的,而不是向上兼容.子类是可以访问父类的方法,反之则不可以.
在这里,A是B的父类,那么A是不能访问B的方法的.让我们通过一个实例的解释你的问题.假设:
B b=new A();编译通过的话. 那么实际上b是类B的一个实例,如果b访问在B中存在而在A中不存在的方法,那么编译器就会报错,因为b被实例化成A类了,只不过从形式上看是还是B类而已.
反过来就可以理解A a=new B();为什么是对的了.
实际上,这里涉及到设计模式中装饰模式的问题,理解了装饰模式,才能真正从原理上理解这个问题.设计模式相关问题可网上搜之.

有错误,修改成B b=(B)new A();或者是A b=new A()

我想父类引用可以引用子类的对象,但是反之则不然

没看出来语句错误

向上转型啊