Действительно ли является ненужным поместить супер () в конструкторе?

Этот автоматически не помещается компилятором, если я не помещаю его в конструктора подкласса?

Это означает, что я не должен даже заботиться об этом? В некоторых статьях они производят его.

И если у меня будет один конструктор с аргументами, то это будет конструктором, или это берет конструктора без списка аргументов?

154
задан Pavel 15 September 2015 в 06:59
поделиться

2 ответа

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

Factory.define :foo do |foo|
end

Factory.define :bar do |bar|
end

Factory.define :baz do |baz|
end

Factory.define :foo_with_baz do |foo|
  foo.after_create { |foo| Factory(:baz, :foo => foo) }
end

Factory.define :bar_baz do |bar_baz|
  bar_baz.bar {|bar| bar.association(:bar, :foo => Factory(:foo_with_baz))
  bar_baz.after_build {| bar_baz| bar_baz.baz_id = bar_baz.foo.bars.first.id }
end

Ключевой проблемой является то, что в базе данных уже должен быть foo, который можно получить только через фабрики, так как вы можете использовать локальные переменные или произвольный код ruby в factories.rb (насколько я могу судить).

-121--4435368-

Таблица должна выглядеть следующим образом:

<table>
    <thead>...</thead>
    <tfoot>...</tfoot>
    <tbody>...</tbody>
</table>

с tfoot над tbody . Однако он будет отображаться в нижней части таблицы

-121--2426202-

Во-первых, некоторая терминология:

  • конструктор без аргументов: конструктор без параметров;
  • конструктор доступных без аргументов: конструктор без аргументов в суперклассе, видимый подклассу. Это означает, что он является общедоступным или защищенным, или, если оба класса находятся в одном пакете, доступ к пакету; и
  • Конструктор по умолчанию: открытый конструктор no-args, добавляемый компилятором, если в классе нет явного конструктора.

Таким образом, все классы имеют по крайней мере один конструктор.

Конструкторы подклассов могут первым делом указать, какой конструктор в суперклассе следует вызвать перед выполнением кода в конструкторе подкласса.

Если конструктор подкласса не указывает, какой конструктор суперкласса следует вызвать, то компилятор автоматически вызовет в суперклассе доступный конструктор no-args.

Если суперкласс не имеет конструктора no-arg или недоступен, то не указывающий конструктор суперкласса, который необходимо вызвать (в конструкторе подкласса), является ошибкой компилятора, поэтому он должен быть указан .

Например:

public class Base { }
public class Derived extends Base { }

Это нормально, потому что если не добавить конструктор явно Java помещает в открытый конструктор по умолчанию для вас.

public class Base { }
public class Derived extends Base { public Derived(int i) { } }

Также прекрасно.

public class Base { public Base(String s) { } }
public class Derived extends Base { }

Приведенная выше ошибка компиляции, поскольку в Base отсутствует конструктор по умолчанию.

public class Base { private Base() { } }
public class Derived extends Base { }

Это также ошибка, поскольку конструктор Base no-args является частным.

216
ответ дан 23 November 2019 в 22:00
поделиться

Если у конструктора Super Class не имеет аргументов Java автоматически вызывает его для вас. Если у него есть аргументы, вы получите ошибку.

SRC: http://java.sun.com/docs/books/tuTorial/java/iandi/super.html

51
ответ дан 23 November 2019 в 22:00
поделиться
Другие вопросы по тегам:

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