继承问题 为什么没调用addFive方法 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 结果应该是3 也就是下面的A 属性不存在多态 不存在覆盖 谁调用就是谁的不是没有调用addFive() 而是因为多态的原因 方法执行的是子类的方法,将子类中的a属性进行+5操作而父类中的却没有改变等到输出的时候 调用的是父类中的属性a 因为之前并没有对父类中的a进行操作,所以输出的时候还是构造函数里面赋值的那个3 它是调用了子类的addFive方法,你在两个addFive方法中加入一个输出语句,这样你就会更清楚它的执行了 你子类的addFile方法跟父类是一样的,这肯定不是覆写,是直接继承的,所以执行foo.addFive();方法,是执行的父类的方法,又public void addFive(){this.a+=5;},也就是该方法是使用父类成员变量进行操作的 LZ去看看这个帖子……很多人解释的很清楚了,和你的问题关键点都一样http://bbs.csdn.net/topics/390457048 Foo foo = new Bar();//调用方法时,使用的是实际对象的方法,既,此处的addFive()是执行了子类Bar.addFive方法foo.addFive();//引用对象属性时,若属性名相同,会引用声明类型域的属性,既Foo.aSystem.out.println("value:"+foo.a);子类的方法是调用了的,子类的a也是改变了的,只是最后打印的是父类的a 结果应该是3父类引用指向子类对象(多态),方法是后期绑定的,而成员变量是不支持后期绑定的,也就是说,成员变量的归属是跟随引用的,而方法的归属是跟随对象的。所以在执行的过程中,相当于调用了子类的addFive方法,操作了子类的成员变量,输出的时候获取的又是父类的成员变量整个过程的操作都是针对子类的,父类的成员变量并没有任何改变。 应为Foo foo=new Bar 也就是说子类对象赋值给了父类,那fool 为上转型,它应该只能调用从父类继承的变量好人方法,或者是隐藏的变量以及重写的方法。主要考的是上转型这个概念。 补充下,如果增加个getter方法,改造下,就能得到预期的结果了:System.out.println("value:"+foo.getA()); 所以主函数调用的函数是1,调用父类的构造函数(a=3)2,调用子类重写的AddFive函数即子类的变量a为8注意此时父类的a还是3,所以答案是3 何时有必要重写equals()和hashCode() 提问,学习多线程出现的问题 基于GSM调制解调器的短信收发平台 用RandomAccessFile类写出文件,而在文件中却没有写入? tomat配置问题 再请教个I/O的小问题,谢谢。 初学java,请教 www.google.com为什么换成了百度????谁知道是为什么?请斑竹别删 xstream,xml解析问题 请教一个关于static关键字的基础问题 JAVA 多线程+同步的疑问,请大侠指路 大家觉得这个方案好吗
属性不存在多态 不存在覆盖 谁调用就是谁的
不是没有调用addFive() 而是因为多态的原因 方法执行的是子类的方法,将子类中的a属性进行+5操作
而父类中的却没有改变
等到输出的时候 调用的是父类中的属性a 因为之前并没有对父类中的a进行操作,所以输出的时候还是
构造函数里面赋值的那个3
this.a+=5;
},也就是该方法是使用父类成员变量进行操作的
http://bbs.csdn.net/topics/390457048
Foo foo = new Bar();
//调用方法时,使用的是实际对象的方法,既,此处的addFive()是执行了子类Bar.addFive方法
foo.addFive();
//引用对象属性时,若属性名相同,会引用声明类型域的属性,既Foo.a
System.out.println("value:"+foo.a);
子类的方法是调用了的,子类的a也是改变了的,只是最后打印的是父类的a
补充下,如果增加个getter方法,改造下,就能得到预期的结果了:
System.out.println("value:"+foo.getA());