为什么结果是
say1
I am son
而不是
say2
I am son 作者: hyz123456 时间: 2013-9-30 11:36
Father father = new son(); 因为JAVA是强类型语言(Strong type),语句中son对象被系统默认向上提升为Father类型,此时father是一个Father类类型对象,所以执行 new Test().say(father); 语句时实际上是往方法里面传一个Father类对象,执行结果say1;而由于say()方法是在建立对象的时候就封装在对象里的,所以father.say();的执行结果还是I am son!
你可以参考下byte i = i+1;作者: 摄影勾魂 时间: 2013-9-30 12:31 本帖最后由 摄影勾魂 于 2013-9-30 12:35 编辑
这个方法,那么打印出“say1”也就不难理解了;而这句Father father = new Son()应用了多态,编译类型是Father,运行类型是Son,那么在执行到System.out.println("say1")的下一句: father.say()时,它实际上调用的是 class Son中的say()方法(该方法重写了 class Father中的say()方法),也就打印出了“I am son”。作者: 血剑无痕 时间: 2013-9-30 13:11
Father father =new Son();这句是子类引用指向父类对象在内存中Father只是执行Son中的一小块区域.son继承了父类覆盖类的方法所以结果是Say1 I am son 希望对你有帮助。作者: 黄炳期 时间: 2013-9-30 20:15
如果问题已经结束,请及时修改主题至“提问结束”