成年人在线观看视频免费,国产第2页,人人狠狠综合久久亚洲婷婷,精品伊人久久

我要投稿 投訴建議

攜程 Java 工程師的面向對象面試題

時間:2021-01-14 16:04:44 面試試題 我要投稿

攜程 Java 工程師的面向對象面試題

  這是伯樂在線小組的一個熱門討論帖

攜程 Java 工程師的面向對象面試題

  public class Base

  {

  private String baseName = "base";

  public Base()

  {

  callName();

  }

  public void callName()

  {

  System. out. println(baseName);

  }

  static class Sub extends Base

  {

  private String baseName = "sub";

  public void callName()

  {

  System. out. println (baseName) ;

  }

  }

  public static void main(String[] args)

  {

  Base b = new Sub();

  }

  }

  求這段程序的輸出。

  來自 未老莫還鄉(xiāng) 的評論:

  【不要在構造器里調用可能被重載的虛方法,這是極度危險的】。構造器的初始化順序大概是 父類靜態(tài)塊 子類靜態(tài)塊 父類初始化語句 父類構造函器 子類初始化語句 子類構造器。父類構造器執(zhí)行的時候,調用了子類的重載方法,然而子類的類字段還在剛初始化的階段,剛完成內存布局,只能輸出null。

  來自 ihuning 的精華評論:

  看我大師歸來:

  1. Base b = new Sub();

  2. Base b = 直接忽略,從 new Sub();開始

  3. 類加載器加載 Base,Sub 類到jvm;

  4. 為Base,Sub 類中的兩個屬性baseName 分配存儲空間,但是不初始化;

  注意:屬性的初始化時放在構造器中,按照代碼順序執(zhí)行的。

  5. new Sub會調用Sub的無參構造器,而在這個構造器中會隱式調用父類Base的.無參構造器;

  6. 父類Base的構造器中代碼本質是

  public Base()

  {

  baseName = "base";

  callName();

  }

  即父類的屬性baseName 的值為base。但為何輸出null,騷年別急。

  7. 因為父類構造器方法是在子類中調用的,即大環(huán)境是子類。此時,調用的方法callName()當然是指子類的方法。而這個方法打印的屬性baseName當然也是子類的。那現(xiàn)在子類的屬性baseName的值是多少呢?答案是null.因為此時子類Sub的構造器內代碼本質是:

  super();

  baseName="sub";

  此時baseName="sub"還沒執(zhí)行。

  因此,左后的值當然是null.

【攜程 Java 工程師的面向對象面試題】相關文章:

java工程師面試題05-07

計算機二級考試Java入門教程:面向對象初步01-26

Java軟件工程師綜合面試題06-05

java面試題01-31

java學習:Java面試題和答案07-23

計算機二級考試Java入門教程:面向對象三大特征01-27

Java面試題集07-19

java基礎面試題02-26

Java框架面試題07-09