【JAVA】代码执行顺序题目

2021/01/16 08:31
阅读数 27

代码执行顺序的题目

public class TestClass {
   
   
    static  class Father{
   
   
        public int money = 1;

        public Father() {
   
   
            this.money = 2;
            showMoney();
        }

        protected  void showMoney(){
   
   
            System.out.println("I am Father , I hava $"+money);
        }
    }

    static  class Son extends Father{
   
   
        public int money = 3;

        public Son() {
   
   
            this.money = 4;
            showMoney();
        }

        protected  void showMoney(){
   
   
            System.out.println("I am Son , I hava $"+money);
        }
    }
    public static void main(String[] args) {
   
   
        Father guy = new Son();
        System.out.println("This guy has $"+guy.money);
    }
}

结果:

在这里插入图片描述

流程:

  • 执行main的第一句

    Father guy = new Son();
    
    • 先执行父类的
      • 属性赋值
        public int money = 1;
        
      • 父类的构造器
          public Father() {
                 
                 
              this.money = 2;
              showMoney(); //这里调的是Son的showMoney()
          }
        
      • Son的showMoney()
        这时候son的money是0,因此第一条输出是I am Son , I hava $0
        protected  void showMoney(){
                 
                  
           System.out.println("I am Son , I hava $"+money);
        }
        

    • 执行Son的属性赋值
      public int money = 3;
      
    • 执行Son的构造器
         public Son() {
             
             
             this.money = 4;
             showMoney();
         }
      
      此时在构造器里把money赋值成了4,所以调用 showMoney()的输出为I am Son , I hava $4
  • 执行main的第二句

    System.out.println("This guy has $"+guy.money);
    

    由于new 出来的对象是Father类型的,所以guy.money应该调的是father.money,由于之前在father的构造器里把father.money赋值成了2,所以这步输出为This guy has $2

展开阅读全文
打赏
0
0 收藏
分享
加载中
更多评论
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部