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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© heimaljx 中级黑马   /  2016-8-18 18:27  /  356 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

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()方法呢?

3 个回复

正序浏览
在多态中,永远记住这句话就行了,当引用引用类型为父类创建子类的对象时,并重写父类的方法,除了成员变量和静态方法是编译和执行都看父类,只有重写方法是编译时候看父类,执行时候看子类,因此输出"你"
回复 使用道具 举报
是不是输出“你”,因为多态中父类引用指向子类对象,子父类存在共同的方法时,调用的是子类的方法也就是c的show2().
回复 使用道具 举报
这问题还像个样。因为两个类里都有show2()  , 那么class c的show2()方法就重写了class b的show2()方法,可以再看一遍视频理解下。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马