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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© L-℡ 高级黑马   /  2013-12-20 12:30  /  1211 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

class Father {
String name="father";
void printname(){
System.out.println(name);
}
}
  
  class Son extends Father{
String name="son";
void printname(){
System.out.println(name);
}
}
  public class Test {
public static void main(String[] args) {
Father f = new Son();
System.out.println(f.name);
f.printname();
}
}

输出:
father
son

提问:我知道这是一个父类的引用指向子类的对象,但为什么用f对象的成员变量即打印f.name是father,而用它的方法printname()打印的是son呢?谢谢解答~!

评分

参与人数 1技术分 +1 收起 理由
FFF + 1 淡定

查看全部评分

5 个回复

倒序浏览
这个是多态的特性...
                   多态中成员函数特点:
                  1.编译时,参阅引用类型变量的所属类是否有调用方法。 看左边
        2.运行时,参阅对象所属类中是否有调用方法。  看右边

        多态中成员属性的特点:
        1.不管编译时,还是运行时,都参阅引用类型变量所属类然后调用。  看左边

评分

参与人数 1技术分 +1 收起 理由
FFF + 1 赞一个!

查看全部评分

回复 使用道具 举报
楼上的同学已经解答了,我加一个静态成员函数在多态中的应用。
这个涉及到多态的特点,必须记住的,没有为什么,就像1+1为什么等于2一样:
在编译时期:参阅引用型变量所属的类中是否有调用的方法。如果有,便用通过;如果没有,编译失败。
在运行时期:参阅对象所属的类中是否有调用的方法。
总结:成员函数在多态调用时,编译看左边,运行看右边。

在多态中,成员变量的特点:
无论编译和运行,都参考左边(引用型变量所属的类)
在多态中,静态成员函数的特点:
无论编译和运行,都参考左边

评分

参与人数 1技术分 +1 收起 理由
FFF + 1 赞一个!

查看全部评分

回复 使用道具 举报
学习……
回复 使用道具 举报
一年之后 发表于 2013-12-20 12:42
这个是多态的特性...
                   多态中成员函数特点:
                  1.编译时,参阅引用类型 ...

了解了,非常感谢!
回复 使用道具 举报
谢文斌 发表于 2013-12-20 13:05
楼上的同学已经解答了,我加一个静态成员函数在多态中的应用。
这个涉及到多态的特点,必须记住的,没有为 ...

都是大神,以后还要多指教!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马