更新時間:2020-09-11 16:55:02 來源:動力節點 瀏覽2524次
1.下面這段代碼的輸出結果是什么?
ublic?class?Test?{
????public?static?void?main(String[]?args)??{????????new?Circle();
????}
}?
class?Draw?{
?????
????public?Draw(String?type)?{????????System.out.println(type+"?draw?constructor");
????}
}?
class?Shape?{????private?Draw?draw?=?new?Draw("shape");
?????
????public?Shape(){????????System.out.println("shape?constructor");
????}
}?
class?Circle?extends?Shape?{????private?Draw?draw?=?new?Draw("circle");
????public?Circle()?{????????System.out.println("circle?constructor");
????}
}
這道題目主要考察的是類繼承時構造器的調用順序和初始化順序。要記住一點:父類的構造器調用以及初始化過程一定在子類的前面。由于Circle類的父類是Shape類,所以Shape類先進行初始化,然后再執行Shape類的構造器。接著才是對子類Circle進行初始化,最后執行Circle的構造器。
2.下面這段代碼的輸出結果是什么?
public?class?Test?{????public?static?void?main(String[]?args)??{
????????Shape?shape?=?new?Circle();
????????System.out.println(shape.name);
????????shape.printType();
????????shape.printName();
????}
}?
class?Shape?{????public?String?name?=?"shape";?????
????public?Shape(){
????????System.out.println("shape?constructor");
????}?????
????public?void?printType()?{
????????System.out.println("this?is?shape");
????}?????
????public?static?void?printName()?{
????????System.out.println("shape");
????}
}?
class?Circle?extends?Shape?{????public?String?name?=?"circle";?????
????public?Circle()?{
????????System.out.println("circle?constructor");
????}?????
????public?void?printType()?{
????????System.out.println("this?is?circle");
????}?????
????public?static?void?printName()?{
????????System.out.println("circle");
????}
}
這道題主要考察了隱藏和覆蓋的區別
覆蓋只針對非靜態方法(終態方法不能被繼承,所以就存在覆蓋一說了),而隱藏是針對成員變量和靜態方法的。這2者之間的區別是:覆蓋受RTTI(Runtime type identification)約束的,而隱藏卻不受該約束。也就是說只有覆蓋方法才會進行動態綁定,而隱藏是不會發生動態綁定的。在Java中,除了static方法和fina·方法,其他所有的方法都是動態綁定。因此,就會出現上面的輸出結果。
總結
父類的構造器調用以及初始化過程一定在子類的前面
初始化順序也是按照;先對象成員初始化--->普通對象代碼塊初始化-->構造方法初始化
以上就是動力節點java培訓機構的小編針對“互聯網常見的Java繼承基礎練習題”的內容進行的回答,希望對大家有所幫助,如有疑問,請在線咨詢,有專業老師隨時為你服務。
0基礎 0學費 15天面授
有基礎 直達就業
業余時間 高薪轉行
工作1~3年,加薪神器
工作3~5年,晉升架構
提交申請后,顧問老師會電話與您溝通安排學習