Step by step 分析多态详解编程语言

在网上看到一篇面试题,题目如下:

写出下列代码的运行结果:

 1 public class DispatchTest { 
 2     public static void main(String[] args) { 
 3         Base b = new Sub(); 
 4         System.out.println(b.x); 
 5     } 
 6 } 
 7  
 8 class Base { 
 9     int x = 10; 
10  
11     public Base() { 
12         this.printMessage(); 
13         x = 20; 
14     } 
15  
16     public void printMessage() { 
17         System.out.println("Base.x = " + x); 
18     } 
19 } 
20  
21 class Sub extends Base { 
22     int x = 30; 
23  
24     public Sub() { 
25         this.printMessage(); 
26         x = 40; 
27     } 
28  
29     public void printMessage() { 
30         System.out.println("Sub.x = " + x); 
31     } 
32 }

通过debug来分析这段代码:
step①:

Step by step 分析多态详解编程语言

step②:

Step by step 分析多态详解编程语言

第二步虽然先到了Sub类的构造器,但是下一步是去了父类Base的构造器。

step③:

Step by step 分析多态详解编程语言

step④:

Step by step 分析多态详解编程语言

第四步是去初始化父类的x变量。

Step by step 分析多态详解编程语言

step⑤:

Step by step 分析多态详解编程语言

接下来开始执行子类Sub的printMessage()方法,因为Sub类覆盖了父类Base的printMessage方法。

Step by step 分析多态详解编程语言

因为子类Sub的x变量还没有初始化,所以输出0.

Step by step 分析多态详解编程语言

Step by step 分析多态详解编程语言

step⑥:

Step by step 分析多态详解编程语言

接下来开始初始化父类Base的x对象。

Step by step 分析多态详解编程语言

step⑦:

下面开始转到子类Sub的初始化:

先初始化子类Sub的x变量。

Step by step 分析多态详解编程语言

Step by step 分析多态详解编程语言

step⑧:

开始执行Sub的printMessage方法:

Step by step 分析多态详解编程语言

因为上一步已经初始化过了Sub的x变量,所以输出30.

Step by step 分析多态详解编程语言

step⑨:

接下来修改Sub的x变量的值。

Step by step 分析多态详解编程语言

Step by step 分析多态详解编程语言

step⑩:

最后,输出b的x值,因为变量不具有多态性,所以,输出的是Base下面的x的值。

Step by step 分析多态详解编程语言

Step by step 分析多态详解编程语言

原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/19415.html

(0)
上一篇 2021年7月19日
下一篇 2021年7月19日

相关推荐

发表回复

登录后才能评论