极标 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条)

报告相同问题?

悬赏问题

  • ¥20 求快手直播间榜单匿名采集ID用户名简单能学会的
  • ¥15 DS18B20内部ADC模数转换器
  • ¥15 做个有关计算的小程序
  • ¥15 MPI读取tif文件无法正常给各进程分配路径
  • ¥15 如何用MATLAB实现以下三个公式(有相互嵌套)
  • ¥30 关于#算法#的问题:运用EViews第九版本进行一系列计量经济学的时间数列数据回归分析预测问题 求各位帮我解答一下
  • ¥15 setInterval 页面闪烁,怎么解决
  • ¥15 如何让企业微信机器人实现消息汇总整合
  • ¥50 关于#ui#的问题:做yolov8的ui界面出现的问题
  • ¥15 如何用Python爬取各高校教师公开的教育和工作经历