黑马程序员技术交流社区

标题: 继承和多态问题 [打印本页]

作者: 位俊鹏    时间: 2014-2-27 01:23
标题: 继承和多态问题
老师出的一个题,整的晕死了...关于面向对象的继承,和多态.
问:下列程序的运行结果是什么?
classA
{
   public void show()
    {
       show2();
    }
   
    public void show2()
    {
       System.out.println("我");
    }
}
classB extends A
{
    public void show2()
    {
       System.out.println("爱");
    }
}
classC extends B
{
    public void show()
    {
       super.show();
    }
   
    public void show2()
    {
       System.out.println("你");
    }
}
publicclass Test
{
    public static void main(String[] args)
    {
       A a = new B();
       a.show();
       B b = new C();
       b.show();
    }
}


作者: 戚兴海    时间: 2014-2-27 02:24
多态中对函数的调用,总结就是两句话:
编译看左边,
运行看右边。
第一个 a.show(),其实就相当于new B().show()
运行的是B中的show()方法(继承自A),show方法中调用show2(),由于B中重写了从A中继承来的show2(),所以运行的是B中的show2()。
第二个b.show()也是一样的道理,最终还是要运行C类中的方法,因为b.show()就相当于new C().show()。
运行的结果应该是“爱”“你”
作者: 平凡成就非凡    时间: 2014-2-27 10:14
当在非静态成员函数中, 编译看左边,执行看右边。
在静态成员函数时,看左边
因为静态在类加载时已经存在啦,先于对象存在。
作者: wdtdcm    时间: 2014-2-27 11:07
这样来看
a中有show()和show2(),//a是new B()
其中show2()是B重写了A的show2();
a.show(),调用了show2(),这个show2()是B的show2(),
即是输出"爱"
同理,下面的那个应该是输出 “你”

作者: 牛头人图腾    时间: 2014-2-28 00:13
一、多态,某一事物具有多种形态。在java中的一大体现:父类引用或者接口的引用指向了自己的子类对象。
二、随着多态的产生,子父类的成员也出现了变化,多态在子父类中的成员上的体现的特点:
     1、成员变量:在多态中,子父类成员变量同名。
         在编译时期:参考的是引用型变量所属的类中是否有调用的成员。(编译时不产生对象,只检查语法错误)
         运行时期:也是参考引用型变量所属的类中是否有调用的成员。
     2、成员函数。
        编译时期:参考引用型变量所属的类中是否有调用的方法。
        运行时期:参考的是对象所属的类中是否有调用的方法。
     3、静态函数。
        编译时期:参考的是引用型变量所属的类中是否有调用的成员。
        运行时期:也是参考引用型变量所属的类中是否有调用的成员。
三、我觉得这个记住就好了,成员在编译和运行时期到底要怎样执行是sun公司说得算,不必太过深究为什么会这样。记住成员的体现特点会用来分析程序就好了。      



作者: 黄飞1991    时间: 2014-2-28 11:47
在多态中成员函数的特点:
在编译时期:参阅引用型变量所属的类中是否有调用的方法。如果有,编译通过,如果没有编译失败。
在运行时期:参阅对象所属的类中是否有调用的方法。
简单总结就是:成员函数在多态调用时,编译看左边,运行看右边。

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

在多态中,静态成员函数的特点:
无论编译和运行,都参考做左边

A a = new B();
   a.show();  
编译时A类中有show()方法,编译成功;运行时B类中也有show()方法,执行B类中的show()方法。运行结果是“爱”。
B b = new C();
    b.show();
同理可得运行结果是“你”。







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