Почему это () и Super () должны быть первым утверждением в конструкторе?JAVA

Программисты JAVA общаются здесь
Anonymous
Почему это () и Super () должны быть первым утверждением в конструкторе?

Сообщение Anonymous »

Java требует, чтобы, если вы называете это () или super () в конструкторе, это должен быть первое утверждение. Почему? < /P>
Например: < /p>

Код: Выделить всё

public class MyClass {
public MyClass(int x) {}
}

public class MySubClass extends MyClass {
public MySubClass(int a, int b) {
int c = a + b;
super(c);  // COMPILE ERROR
}
}
Солнечный компилятор говорит: Call to Super должен быть первым оператором в конструкторе . Компилятор Eclipse говорит: вызов конструктора должен быть первым оператором в конструкторе .
Однако вы можете обойти это, повторно воспроизведя код немного:

Код: Выделить всё

public class MySubClass extends MyClass {
public MySubClass(int a, int b) {
super(a + b);  // OK
}
}
< /code>
Вот еще один пример: < /p>
public class MyClass {
public MyClass(List list) {}
}

public class MySubClassA extends MyClass {
public MySubClassA(Object item) {
// Create a list that contains the item, and pass the list to super
List list = new ArrayList();
list.add(item);
super(list);  // COMPILE ERROR
}
}

public class MySubClassB extends MyClass {
public MySubClassB(Object item) {
// Create a list that contains the item, and pass the list to super
super(Arrays.asList(new Object[] { item }));  // OK
}
}
Итак, это не мешает вам выполнять логику до вызова super () . Это просто мешает вам выполнять логику, что вы не можете вписаться в одно выражение. Компилятор говорит, что вызов к этому должен быть первым оператором в Constructor .
Почему у компилятора есть эти ограничения? Можете ли вы привести пример кода, где, если у компилятора не было этого ограничения, произошло бы что -то плохое?

Подробнее здесь: https://stackoverflow.com/questions/116 ... onstructor

Вернуться в «JAVA»