this 程序題

2021-04-16 17:17 更新

題目一

  1. class Tester{
  2. int var;
  3. Tester(double var){this.var = (int)var};
  4. Tester(int var){this("hello");
  5. Tester(String s){
  6. this();
  7. System.out.println(s);
  8. }
  9. Tester(){ System.out.println("good-bye");}
  10. }
  11. public static void main(String[] args)
  12. {
  13. Tester t = new Tester(5);
  14. }
  15. }

Tester t = new Tester(5) 的輸出是什么?

  1. good-bye
  2. hello

題目二

貌似和 this 無關(guān)但是很重要

  1. public class Base { int i;
  2. Base(){
  3. add(1);
  4. System.out.println(i);
  5. }
  6. void add(int v){
  7. i+=v;
  8. System.out.println(i);
  9. }
  10. }
  11. public class MyBase extends Base{
  12. MyBase(){
  13. System.out.println("MyBase");
  14. add(2);
  15. }
  16. void add(int v){
  17. System.out.println("MyBase Add");
  18. i+=v*2;
  19. System.out.println(i);
  20. }
  21. }
  22. public class Test {
  23. public static void main(String[] args) {
  24. go(new MyBase());
  25. }
  26. static void go(Base b){
  27. b.add(8);
  28. }
  29. }

輸出的結(jié)果是 22

子類會首先調(diào)用父類的構(gòu)造函數(shù),在父類的構(gòu)造函數(shù) Base() 中執(zhí)行 add() 方法. 但這個 add() 方法由于是在新建 MyBase 對象時調(diào)用的. 所以是執(zhí)行的 MyBase 中的 add 方法

在Java中,子類的構(gòu)造過程中,必須 調(diào)用其父類的構(gòu)造函數(shù), 是因為有繼承關(guān)系存在時, 子類要把父類的內(nèi)容繼承下來, 通過什么手段做到的? 這樣: 當(dāng)你new一個子類對象的時候, 必須首先要new一個父類的對像出來, 這個父類對象位于子類對象的內(nèi)部, 所以說,子類對象比父類對象大, 子類對象里面包含了一個父類的對象, 這是內(nèi)存中真實的情況.

構(gòu)造方法是new一個對象的時候, 必須要調(diào)的方法, 這是規(guī)定, 要new父類對象出來, 那么肯定要調(diào)用其構(gòu)造方法, 所以 第一個規(guī)則:子類的構(gòu)造過程中,必須 調(diào)用其父類的構(gòu)造方法

一個類, 如果我們不寫構(gòu)造方法, 那么編譯器會幫我們加上一個默認的構(gòu)造方法, 所謂默認的構(gòu)造方法, 就是沒有參數(shù)的構(gòu)造方法, 但是如果你自己寫了構(gòu)造方法, 那么編譯器就不會給你添加了

所以有時候當(dāng)你new一個子類對象的時候,肯定調(diào)用了子類的構(gòu)造方法,但是在子類構(gòu)造方法中我們并沒有顯示的調(diào)用基類的構(gòu)造方法,就是沒寫,如:super(); 并沒有這樣寫,但是

第二個規(guī)則:如果子類的構(gòu)造方法中沒有顯示的調(diào)用基類構(gòu)造方法,則系統(tǒng)默認調(diào)用基類無參數(shù)的構(gòu)造方法

注意:如果子類的構(gòu)造方法中既沒有顯示的調(diào)用基類構(gòu)造方法,而基類中又沒有默認無參的構(gòu)造方法,則編譯出錯,所以,通常我們需要顯示的:super(參數(shù)列表),來調(diào)用父類有參數(shù)的構(gòu)造函數(shù)

以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號