2 zhqingyun163 zhqingyun163 于 2013.07.16 09:58 提问

一个类继承的问题,不太好描述,直接贴代码

父类
public class MySuper {

public void say(){
System.out.println("super");
}

public void tosay(){
say();
}
}
子类:
public class MySub extends MySuper {

public void say(){
System.out.println("sub");
}

public static void main(String[] args) {
MySub sub = new MySub();
sub.tosay();
}
}

输出结果是 sub,就问一下这个地方为什么回调了子类的say方法而不是去执行父类的say方法呢

3个回答

ljf5566
ljf5566   2013.07.16 10:11

因为你实例化的对象是子类,所以你调用的方法是子类的方法,和父类的方法无关

zhqingyun163
zhqingyun163 哥们你运行一下,输出都是sub,和super无关
4 年多之前 回复
ljf5566
ljf5566 sorry,我刚才没仔细看,我以为你子类中有一个tosay的方法;如果按照你上面的代码的话,输出的应该是:super.原因是子类可以继承父类中所有非私有的成员。如果你的子类中有tosay的方法的话,子类会执行自己的tosay方法,输出:sub
4 年多之前 回复
zhqingyun163
zhqingyun163 MySuper sub = new MySub(); 你认为输出是什么呢
4 年多之前 回复
u010030637
u010030637   2013.07.17 22:45

因为你的子类重写了父类的方法,所以调用的就是子类的了

u011419265
u011419265   2013.07.16 11:39

很明显这是继承中的隐藏原则啊。

Csdn user default icon
上传中...
上传图片
插入图片