簡體   English   中英

將參數傳遞給void方法(整數或對象)

[英]Passed parameter into void method (integer or object)

我試圖找出以下代碼的輸出,除了兩行外,我幾乎都正確了。 3號線和7號線

預期的輸出將是:

1 : 10 
2 : 20 
3 : 20 
4 : 15 
5 : 40 
6 : 75 
7 : 35 
8 : 75 
9 : 20

正如我提到的,除了3和7外,我一切都正確。對於我來說,第3行是25,而第7行是40。請您解釋一下為什么第3行:20和第7行:35? 我曾嘗試過查找它,但找不到很好的解釋。

這不是功課!

public class Alpha {
  protected int x;

  public Alpha() { this(10); }
  public Alpha(int x) { this.x = x; }

  public void f() { x = 20; }
  public void f(int x) { x = 25; }
  public void g(Object a) { x = 30; }
  public void h(Object a) { x = 50; }
  public void h(Integer a) { x = 55; }
}

public class Beta extends Alpha {
  public Beta() { super(15); }
  public void g(Object a) { x = 35; }
  public void g(Integer a) { x = 40; }
  public void h(Object b) { x = 70; }
  public void h(Integer b) { x = 75; }

  public static void main(String[] args) {
    Alpha a = new Alpha();
    System.out.println("1 : " + a.x);
    a.f();
    System.out.println("2 : " + a.x);
    a.f(100);
    System.out.println("3 : " + a.x);

    Beta b = new Beta();
    System.out.println("4 : " + b.x);
    b.g(200);
    System.out.println("5 : " + b.x);
    b.h(300);
    System.out.println("6 : " + b.x);

    Alpha c = b;
    c.g(400);
    System.out.println("7 : " + c.x);
    c.h(500);
    System.out.println("8 : " + c.x);
    c.f();
    System.out.println("9 : " + b.x);
  }
}

對於問題3,變量aAlpha 在調用af(100)之前,將調用af() ,它將x設置為20 在調用af(100)局部變量x在方法f(int x)設置為25 ,而不是實例變量 x 實例變量仍為20

對於問題7,將變量b (即Beta )分配給Alpha引用c 調用cg(400) ,編譯器必須調用g(Object) ,因為這是Alphag唯一可用的重載。 在運行時,多態決定,由於對象是Beta ,的重寫g(Object)Beta被選擇,它設置x35 這是因為編譯器選擇方法重載,而在運行時使用多態選擇方法重寫。

第3行之所以是20,是因為您要更改傳遞到方法中的'x'的值,而不是類級別變量'x'。 將您的代碼更改為以下內容。 如果您閱讀可變范圍的書,您也會得到更好的理解。

public class Alpha {
  protected int x;

  public Alpha() { this(10); }
  public Alpha(int x) { this.x = x; }

  public void f() { x = 20; }
  public void f(int x) { this.x = 25; }
  public void g(Object a) { x = 30; }
  public void h(Object a) { x = 50; }
  public void h(Integer a) { x = 55; }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM