请教一个java初级问题

老俊说技术 2009-06-28 07:23:28
class Foo { 
public Integer a;
public Foo() { a = 3; }
public void addFive() { a += 5; }
}
public class Bar extends Foo {
public Integer a;
public Bar() { a = 8; }
public void addFive() { a +=5; }
public static void main(String[] args){
Foo f=new Bar();
f.addFive();
System.out.println(f.a);
}
}


为什么这个的输出结果是3;请详细解释,谢谢
...全文
379 43 打赏 收藏 转发到动态 举报
写回复
用AI写文章
43 条回复
切换为时间正序
请发表友善的回复…
发表回复
zxcv991 2009-11-16
  • 打赏
  • 举报
回复
不错
zj370159662 2009-11-16
  • 打赏
  • 举报
回复
学习
icekay Song 2009-11-16
  • 打赏
  • 举报
回复
受教..
haiaiwoaaaa 2009-11-16
  • 打赏
  • 举报
回复
我 怎么感觉是 13啊...
iter_jsx 2009-11-15
  • 打赏
  • 举报
回复
父类应用指向子类对象
jjj3751386 2009-11-15
  • 打赏
  • 举报
回复
学习了,又复习了一次多态~
godismydaughter 2009-11-15
  • 打赏
  • 举报
回复
又复习了一次多态。
zzz_robinson 2009-11-15
  • 打赏
  • 举报
回复
学习ing
kuruby 2009-11-15
  • 打赏
  • 举报
回复
很有意思的一个问题,学习了。
vs198611 2009-11-10
  • 打赏
  • 举报
回复
楼上多正解
xiaohongboabcd 2009-11-10
  • 打赏
  • 举报
回复
 
class Foo {
public Integer a;
public Foo() { a = 3; }
public void addFive() { a += 5; }
}
public class Bar extends Foo {
public Integer a;
public Bar () { a = 8; }
public void addFive() { a +=5; }
public static void main(String[] args){
Bar f=new Bar ();
Foo f1=new Bar ();
f1.addFive();
f.addFive();
System.out.println(f.a);
System.out.println("这个a是和父类绑定的:"+f1.a);
System.out.println("这个是和子类对象的实例绑定的:"+new Bar ().a);
}
}
这个就是涉及到多态,java虚拟机的绑定机制:
1、成员变量(静态和非静态)和静态方法都是和所声明的类型绑定(静态绑定,在编译期就绑定了)如你开始声明类型是FOO类型的,所以a和父类绑定。
2、实例方法是和实际声明的对像绑定的(动态绑定,运行时进行绑定),所以你调用的时候就是调用的子类的addFive()方法,这个就是原因了。不知道对不?
Eden_812 2009-11-10
  • 打赏
  • 举报
回复
public int addFive() { return a += 5; }
}
taoyuan1682001 2009-09-17
  • 打赏
  • 举报
回复
public static void main(String[] args) {
Bar b = new Bar();
Foo f = b;
f.addFive();//实现了动态绑定,编译器从子类中中该方法,如果找不到,再去父类中找这个方法.(Bar中的a被加上5(8+5),而Foo中的a没有改变值,还是(a=3)).
System.out.println(f.a);//字段没有多态,所以指向的是父类总的a变量(此时Bar中的a是13,只是没有打印)
System.out.println(b.a);//此时Bar中的a是13
}
m_angle_m 2009-09-17
  • 打赏
  • 举报
回复
f.a在编译的时候就已经确定了,它不具有多态性,是编译器绑定,在编译的时候已经确定调用的就是父类的a成员
libingyang860917 2009-09-11
  • 打赏
  • 举报
回复
new Bar() 的时候会有两个a变量,一个是自己的,一个是超类的初始化为3 ,当掉用方法addFive 时 :f指向的是 Bar的一个实例,所以调用的是Bar 里面的方法 改变了Bar的变量a的值,而另外一个超类的初始化为3的值没有改变。
louisgarcia 2009-09-11
  • 打赏
  • 举报
回复
学习了
KHacker_001 2009-07-15
  • 打赏
  • 举报
回复
[Quote=引用 23 楼 steedhorse 的回复:]
Foo.a跟Bar.a不是一个a,成员变量只有隐藏(hide),没有覆盖(override)。
但成员函数有覆盖,因此执行的是Bar的addFive。
于是这个程序的效果就变成了:把Bar.a加上5,然后打印Foo.a。
[/Quote]很好 学习了
happyworld1 2009-07-15
  • 打赏
  • 举报
回复
bar继承foo f.a其实就是super().a;而父亲 中的a a的值就是
catici 2009-07-08
  • 打赏
  • 举报
回复
貌似是 直接调用父类的 无参构造函数吧

有参构造函数需要有参数才能调用……
一时懿亮 2009-07-08
  • 打赏
  • 举报
回复
声明Foo f的时候,调用了Foo类中的构造,完成了Foo类中a的初始化。
加载更多回复(23)
已经博主授权,源码转载自 https://pan.quark.cn/s/a4b39357ea24 ### TDS 2014示波器使用手册知识点总结 #### 一、TDS 1000B 和 TDS 2000B 系列数字存储示波器概述 - **产品系列**: TDS 1000B 和 TDS 2000B 是由 Tektronix 公司所研发并推出的数字存储示波器产品线。 - **功能定位**: 主要致力于为电子工程师以及研发人员提供具备高性能与高精度的信号测量设备。 - **应用领域**: 此类设备被普遍应用于教育机构、研发实验室以及工业生产过程中的测试环节。 #### 二、TDS 2014示波器基本操作与使用 - **开机与基本设置**: - 在启动设备时,必须确保仪器已经正确接地。 - 在使用之前,需要根据观察需求设定合适的屏幕亮度、对比度等显示参数。 - **通道选择与配置**: - 可以通过触摸显示屏或设备前面板上的按钮来选定需要进行的测量通道。 - 可依据实际需求来调整垂直灵敏度、水平时间基准等设置项。 - **触发设置**: - 触发模式包括自动、常态、单次等多种选择。 - 触发源与阈值设定涉及确定触发信号的具体来源及其电压阈值水平。 - **测量与分析功能**: - 提供多种自动测量功能选项,涵盖电压峰峰值、频率等参数的测量。 - 支持对波形进行数学运算,例如执行两个波形的相加或相减操作。 #### 三、TDS 2014示波器高级特性 - **波形捕获率**: - 波形捕获率越高,意味着在检测偶发事件方面的能力越强。 - **波形存储与回放**: - 支持将波形数据存储到内部存储单元或外部存储设备中。 - 用户能够随时调取先前保存的波形数据,以进行深入分析。 - *...
内容概要:本文聚焦2026年高教社杯全国大学生数学建模竞赛B题“无线电干扰源的快速自动定位与清除”,同时整合了多个数学建模与工程技术仿真研究资源,涵盖SEM广告投放策略优化、无人机协同路径规划、电力系统无功优化、微电网调度、负荷预测、电动汽车响应率建模等多个领域。其中重点详述了SEM广告投放策略的系统性建模,构建了从问题诊断、关键词分类、预算优化到不确定性环境下鲁棒决策的完整框架。提出基于成本—效益二维归一化的五类关键词划分方法(黄金词、重点词、潜力词、问题词、无效词),并建立了0-1整数规划与CVaR鲁棒优化模型,实现注册转化最大化与风险控制的平衡。文档还汇集了大量基于Matlab/Simulink的仿真资源,涉及智能优化算法、机器学习、信号处理、路径规划等方向,并配套提供代码与论文支持,形成跨学科的技术资源共享平台。; 适合人群:具备一定数据分析与建模基础,正在准备数学建模竞赛或从事科研工作的本科生、研究生及工程技术人员。; 使用场景及目标:①应用于数学建模竞赛备赛,学习多目标优化、分类模型、鲁棒决策等建模范式;②开展广告投放、电力调度、路径规划等领域的科研项目时借鉴模型构建与算法实现方法;③通过提供的Matlab/Python代码快速复现经典或前沿研究成果,提升科研效率与实践能力。; 阅读建议:此资源集合了多个独立研究主题,建议读者根据自身研究方向选择性阅读,重点关注模型构建逻辑与算法实现细节,并结合所提供的Matlab/Python代码进行实践验证,以加深理解与应用能力。

62,621

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧