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

报告相同问题?

悬赏问题

  • ¥100 任意维数的K均值聚类
  • ¥15 stamps做sbas-insar,时序沉降图怎么画
  • ¥15 unity第一人称射击小游戏,有demo,在原脚本的基础上进行修改以达到要求
  • ¥15 买了个传感器,根据商家发的代码和步骤使用但是代码报错了不会改,有没有人可以看看
  • ¥15 关于#Java#的问题,如何解决?
  • ¥15 加热介质是液体,换热器壳侧导热系数和总的导热系数怎么算
  • ¥100 嵌入式系统基于PIC16F882和热敏电阻的数字温度计
  • ¥15 cmd cl 0x000007b
  • ¥20 BAPI_PR_CHANGE how to add account assignment information for service line
  • ¥500 火焰左右视图、视差(基于双目相机)