黑马程序员技术交流社区

标题: 请教一个java基础多态的问题 [打印本页]

作者: heimaljx    时间: 2016-8-18 18:27
标题: 请教一个java基础多态的问题
B:看下面程序是否有问题,如果没有,说出结果
class A {
    public void show() {
        show2();
    }
    public void show2() {
        System.out.println("我");
    }
}
class B extends A {
    public void show() {
        show2();
    }
    public void show2() {
        System.out.println("爱");
    }
}
class C extends B {
    public void show() {
        super.show();
    }
    public void show2() {
        System.out.println("你");
    }
}
public class Test2DuoTai {
    public static void main(String[] args) {
        B b = new C();
        b.show();
    }
}

java基础视频里的题目,老师没有解释,b.show调用了class c里的show()方法,然后show()里面的super.show()调用class b的show()方法,问题是此时的show()方法为什么是调用class c的show2()方法,而不是calss b的show2()方法呢?


作者: 水月灬清影    时间: 2016-8-18 19:17
这问题还像个样。因为两个类里都有show2()  , 那么class c的show2()方法就重写了class b的show2()方法,可以再看一遍视频理解下。
作者: shenlibing666    时间: 2016-8-20 00:12
是不是输出“你”,因为多态中父类引用指向子类对象,子父类存在共同的方法时,调用的是子类的方法也就是c的show2().
作者: lrwillinggerry    时间: 2016-8-20 00:57
在多态中,永远记住这句话就行了,当引用引用类型为父类创建子类的对象时,并重写父类的方法,除了成员变量和静态方法是编译和执行都看父类,只有重写方法是编译时候看父类,执行时候看子类,因此输出"你"




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