当前位置:编程学习 > JAVA >>

关于继承的问题

本人菜鸟一只,有个java的继承问题求助各位大侠:
有一个父类A,一个继承A的子类B
对于B b = new B()
b可以调用父类的方法和子类自己扩展的方法,并且如果子类复写了父类的变量或者方法,那么b调用的结果是复写之后的子类的变量值或者方法。
但是如果A a = new B()
那么a不可以调用B类中扩展的任何子类的方法,且如果A和B有相同名称的变量i,那么a.i返回结果是A中的i的值。
那么请问这样子的写法A a = new B();有什么用呢?结果不就相当于A a = new A()么?
想了很久没明白,求大侠不吝赐教。 继承 Java --------------------编程问答-------------------- 好吧,我也是刚学的,貌似还能说两句,对于B b = new B()是new 的子类,给子类创建对象b可以调用子类的方法和变量,也可以调用子类自己新增的方法,而A a = new B()是用父类创建的对象,简而言之就是对象的上转型,对象a可以调用子类继承父类的方法和变量,但像你说的扩展方法应该是子类新增的方法吧,这在对象的上转型中是不可以调用的,即规定对象上型不能调用子类新增的方法,如果要调用,需要强制转换的,说的不好,多多理解,,, --------------------编程问答-------------------- 谢谢楼上的解释,但是A a = new B()中的a对象即便是调用子类继承父类的方法和变量,得到的结果还是父类中的变量的值,以及父类方法的内容,比如A中有个变量String s = "a",B
中有String s = "b",那么打印a.s结果还是a而不是b。。。这样子A a = new B()和A a = new A()完全没有差别啊感觉。。 --------------------编程问答--------------------
引用 2 楼 dinglin1121 的回复:
谢谢楼上的解释,但是A a = new B()中的a对象即便是调用子类继承父类的方法和变量,得到的结果还是父类中的变量的值,以及父类方法的内容,比如A中有个变量String s = "a",B
中有String s = "b",那么打印a.s结果还是a而不是b。。。这样子A a = new B()和A a = new A()完全没有差别啊感觉。。

呵呵,不是这样,实际上A a = new B();可以分开看,声明一个A 类型的a对象,a并不知道在运行时会执行谁。另外,只是如果不把String s = "a";修饰变为protected,子类不能继承的,子类对于s的赋值当然,没有覆盖掉父类的s。 --------------------编程问答-------------------- 其实这只是一个简单的例子 如果A还有其他的子类也有跟A一样的方法呢?难道每调用一次就new一次,那岂不是很累。
所以如果用这种方法传递一个引用,最后实现的时候再new就很快了。 --------------------编程问答-------------------- 看java编程思想 --------------------编程问答-------------------- A a=new B();属性是不会继承的,只有方法。a.。。B类中的方法还是可以的吧。应该是这样de
--------------------编程问答-------------------- 属性可以继承。但修饰符要注意。。。实际new出来的实列对象还是B
--------------------编程问答-------------------- 我个人觉得有2点需要理解一下:
(1)属性不继承,不覆盖。
假设A和B都有相同的属性x,但是请注意这2个x是不一样的,可以理解A有属性ax,B有属性bx;
B b = new B()和A a = new B()构造出来的对象b和a,分别调用属性x时候,b.x其实就是b.bx,a.x就是a.ax

(2)方法会覆盖
假设A和B都有相同的方法f(),执行的时候由对象的实际类决定;
B b = new B()和A a = new B()构造出来的对象b和a,分别调用方法f()时候,因为b和a实际上都是new B(),所以效果一样。但是A a = new A()就和他们不一样了,因为这个a是通过new A()出来的类A的对象。 --------------------编程问答-------------------- 对不起,上面说的(1)属性不继承有误。属性不同名是继承的,同名是不覆盖的。 --------------------编程问答-------------------- 多态的应用
补充:Java ,  Java EE
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,