黑马程序员技术交流社区

标题: 关于继承的问题 [打印本页]

作者: L-℡    时间: 2013-12-20 12:30
标题: 关于继承的问题
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呢?谢谢解答~!
作者: 一年之后    时间: 2013-12-20 12:42
这个是多态的特性...
                   多态中成员函数特点:
                  1.编译时,参阅引用类型变量的所属类是否有调用方法。 看左边
        2.运行时,参阅对象所属类中是否有调用方法。  看右边

        多态中成员属性的特点:
        1.不管编译时,还是运行时,都参阅引用类型变量所属类然后调用。  看左边
作者: 谢文斌    时间: 2013-12-20 13:05
楼上的同学已经解答了,我加一个静态成员函数在多态中的应用。
这个涉及到多态的特点,必须记住的,没有为什么,就像1+1为什么等于2一样:
在编译时期:参阅引用型变量所属的类中是否有调用的方法。如果有,便用通过;如果没有,编译失败。
在运行时期:参阅对象所属的类中是否有调用的方法。
总结:成员函数在多态调用时,编译看左边,运行看右边。

在多态中,成员变量的特点:
无论编译和运行,都参考左边(引用型变量所属的类)
在多态中,静态成员函数的特点:
无论编译和运行,都参考左边
作者: 夏德宇    时间: 2013-12-20 13:35
学习……
作者: L-℡    时间: 2013-12-20 13:56
一年之后 发表于 2013-12-20 12:42
这个是多态的特性...
                   多态中成员函数特点:
                  1.编译时,参阅引用类型 ...

了解了,非常感谢!
作者: L-℡    时间: 2013-12-20 14:00
谢文斌 发表于 2013-12-20 13:05
楼上的同学已经解答了,我加一个静态成员函数在多态中的应用。
这个涉及到多态的特点,必须记住的,没有为 ...

都是大神,以后还要多指教!




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2