A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 王涵 中级黑马   /  2013-9-30 11:01  /  1511 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 杨增坤 于 2013-10-1 21:28 编辑


  1. class Father {
  2.         public void say() {
  3.                 System.out.println("I am father!");
  4.         }

  5. }

  6. class Son extends Father {
  7.         @Override
  8.         public void say() {
  9.                 System.out.println("I am son");
  10.         }
  11. }

  12. public class Test {

  13.         public void say(Father father) {
  14.                 System.out.println("say1");
  15.                 father.say();
  16.         }

  17.         public void say(Son son) {
  18.                 System.out.println("say2");
  19.                 son.say();
  20.         }

  21.         public static void main(String[] args) {
  22.                 Father father = new Son();
  23.                 new Test().say(father);
  24.         }
  25. }
复制代码
为什么结果是
say1
I am son
而不是
say2
I am son

评分

参与人数 1技术分 +1 收起 理由
乔兵 + 1

查看全部评分

4 个回复

倒序浏览
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;

评分

参与人数 1技术分 +1 收起 理由
乔兵 + 1

查看全部评分

回复 使用道具 举报
本帖最后由 摄影勾魂 于 2013-9-30 12:35 编辑

在new Test().say(father)中,实参father是Father类型的对象,所以它调用的是:
  1. public void say(Father father) {
  2.                 System.out.println("say1");
  3.                 father.say();
  4.         }
复制代码
这个方法,那么打印出“say1”也就不难理解了;而这句Father father = new Son()应用了多态,编译类型是Father,运行类型是Son,那么在执行到System.out.println("say1")的下一句:  father.say()时,它实际上调用的是 class Son中的say()方法(该方法重写了 class Father中的say()方法),也就打印出了“I am son”。

评分

参与人数 1技术分 +1 收起 理由
乔兵 + 1

查看全部评分

回复 使用道具 举报
Father father =new Son();这句是子类引用指向父类对象在内存中Father只是执行Son中的一小块区域.son继承了父类覆盖类的方法所以结果是Say1 I am son 希望对你有帮助。

评分

参与人数 1技术分 +1 收起 理由
乔兵 + 1

查看全部评分

回复 使用道具 举报
如果问题已经结束,请及时修改主题至“提问结束”
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马