2016-09-13 3 views
-3
private int a = 2; 
public A(int x) { 
    a = x*2; 
} 
public A() { 
    this(5); 
} 
public int test() { 
    return a; 
} 
public static void main(String argv[]) { 
    A a1 = new A(); 
    System.out.println(a1.test()); 
}  

Привет, ребята, я новичок в Java, и это вопрос для моего макетного теста. Вывод - 10, который, как я думал, должен быть 5. Пожалуйста, помогите! Очень ценю!Конструкторы перегрузки

+2

Пожалуйста, отформатируйте свой код надлежащим образом – Jens

+1

Пожалуйста, отформатируйте свой код более читаемо. У вас много вертикального пространства - используйте его! Теперь, почему вы думаете, что ответ должен быть 5? Вы вызываете 'new A()', который вызывается конструктором 'A (int)' с аргументом 5 ... и затем этот конструктор удваивает значение до 10. –

+2

Если вы используете отладчик, вы будете см., что происходит. – Jens

ответ

4

Вы вызываете главный конструктор A(), который вызывает A(int x) (по заявлению this(5);). Поэтому a присваивается 10 (a = x*2;, где x - 5).

0

Ну что случается:

A a1 = new A(); 

это использует общественности A() конструктор так он идет:

public A(){ 
    this(5); 
} 

это теперь называют общественности A (INT х) конструктор и x будут равны 5, поэтому это будет называться:

public A(5) { 
    a = 5 * 2; 
} 

Поэтому:

a = 5 * 2; 
a = 10; 

Так будет 10.

Так что:

System.out.println(a1.test()); 

будет вызывать метод испытания на объекте a1, который возвращает целое число в а1 , который мы выяснили, составляет 10.

По существу это происходит:

System.out.println(10); 

Так что выход 10.

Это, по существу, что вы увидите, если вы используете режим отладки (который каждый IDE имеет).

Смежные вопросы