Конструкторы по умолчанию и наследование в Java

Вы можете попробовать это:

  Text x = Text('123123');
  Text y = Text(x.data);
  print(y.data);
  String val = Text('xxxx').data;
  print(val);

Однако, если значение для виджета Text связано с переменной состояния, вы можете просто инициализировать его уже.

 Text newWidgetText = Text(_stateValue);
51
задан msrd0 15 November 2015 в 07:43
поделиться

4 ответа

  1. , Если Вы не делаете конструктора, , пустой конструктор по умолчанию автоматически создается .

  2. , Если какой-либо конструктор явно не называет супер или этого конструктора как его первый оператор, , вызов к супер () автоматически добавляется .

Всегда.

61
ответ дан Flimm 7 November 2019 в 09:49
поделиться

Если Вы не используете супер (...) вызовы конструктора пустой конструктор его родителя.Примечание: Это делает это на всем Вы классы, даже те, которые расширяют Объект.

Это не наследовалось, подклассы не получают тех же конструкторов с теми же аргументами. Однако можно добавить конструкторов, которые вызывают одного из конструкторов суперкласса.

11
ответ дан Peter Lawrey 7 November 2019 в 09:49
поделиться

Конструкторы не наследованы.

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

52
ответ дан starblue 7 November 2019 в 09:49
поделиться

При обеспечении конструктора затем, Java не генерирует Вас пустой конструктор по умолчанию. Таким образом, Ваш производный класс только сможет вызвать Вашего конструктора.

конструктор по умолчанию не инициализирует Ваши частные переменные к значениям по умолчанию. Доказательство - то, что возможно записать класс, который не имеет конструктора по умолчанию и инициализировал его членов парламента, не занимающих официального поста к значениям по умолчанию. Вот пример:

public class Test {

    public String s;
    public int i;

    public Test(String s, int i) {
        this.s = s;
        this.i = i;
    }

    public Test(boolean b) {
        // Empty on purpose!
    }

    public String toString() {
        return "Test (s = " + this.s + ", i = " +  this.i + ")";
    }

    public static void main (String [] args) {
        Test test_empty = new Test(true);
        Test test_full = new Test("string", 42);
        System.out.println("Test empty:" + test_empty);
        System.out.println("Test full:"  + test_full);
    }
}
3
ответ дан John Topley 7 November 2019 в 09:49
поделиться
Другие вопросы по тегам:

Похожие вопросы: