极标 2013-05-10 21:41
浏览 245
已采纳

一段代码,父类调用了子类重载的方法,求解释。

public class Person {
    
    public void fight(){
        System.out.println("Person战斗");
        say();
    }
    
    public void say(){
        System.out.println("Person说话");
    }
    
}
public class Student extends Person {
    
    @Override
    public void fight() {
        System.out.println("Student战斗!");
        super.fight();
    }

    @Override
    public void say() {
        System.out.println("Student说话!");
    }
    
    public static void main(String[] args) {
        Student student = new Student();
        student.fight();
    }
    
}

/*

输出结果

Student战斗!

Person战斗!

Student说话!

*/

  • 写回答

3条回答 默认 最新

  • lao19884wang 2013-05-11 02:14
    关注

    Student student = new Student();

    student.fight();
    调用子类的 fight方法 所以打印---Student战斗!

    而子类中的方法中super.fight();
    调用父类中的fight方法 打印--Person战斗!
    父类中的fight中又调用了say方法 你感觉奇怪的是为什么不是打印父类中say方法中的--Person说话 而是打印子类中的--Student说话 它在调用say方法的时候首先是到父类里面找say方法 然后在到子类中找 在父子类中一样的方法 jvm会认为子类重写了父类的方法 所以调用的是子类的say方法 不相信你把父类的 say方法 改成sayDota() 这样都会打印出来

    不对的请指正 继续向jinnianshilongnian膜拜!!!

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥15 树莓派与pix飞控通信
  • ¥15 自动转发微信群信息到另外一个微信群
  • ¥15 outlook无法配置成功
  • ¥30 这是哪个作者做的宝宝起名网站
  • ¥60 版本过低apk如何修改可以兼容新的安卓系统
  • ¥25 由IPR导致的DRIVER_POWER_STATE_FAILURE蓝屏
  • ¥50 有数据,怎么建立模型求影响全要素生产率的因素
  • ¥50 有数据,怎么用matlab求全要素生产率
  • ¥15 TI的insta-spin例程
  • ¥15 完成下列问题完成下列问题