(面试题2)看程序写结果(先判断有没有问题,如果没有,写出结果)

2:看程序写结果(先判断有没有问题,如果没有,写出结果)
package com.shujia.面试题;
/*
2:看程序写结果(先判断有没有问题,如果没有,写出结果)

 */
class A {
    public void show()
    {
        show2();
    }

    public void show2()
    {
        System.out.println("我");
    }
}
class B extends A
{
    public void show2()
    {
        System.out.println("爱");
    }
}
class C extends B
{
    public void show()
    {
        super.show();
    }

    public void show2()
    {
        System.out.println("你");
    }
}
public class FaceTest2 {
    public static void main(String[] args)
    {
        A a = new B();
        a.show();
        /*
        父类的引用指向子类的对象,首先编译看父类A中有没有show,有show,编译通过,根据多态访问成员的特点(编译看左,运行看右),
        接着看子类B中的show方法(子类B中的show方法是根据父类A继承来的,并不是共享的)指向子类B中的show2方法,
        子类B中的show2方法,子类B的show2方法则是输出“爱”
         */
        B b = new C();
        b.show();
        /*
        父类的引用指向子类的对象,首先编译看父类中有没有show方法(子类C的父类B中,父类B也是父类A的子类,所以继承有show方法),
        所以编译通过,子类C运行show方法,调用父类B的show方法,父类B中的show方法是调用父类B的父类A的show方式,是调用show2方法,
        运行依然看子类C中的show2方法,所以结果是“你”
         */
    }
}

posted @ 2024-03-06 15:29  peculiar-  阅读(51)  评论(0)    收藏  举报