Если вы оказались в контейнере, вы должны выполнить команду для входа в этот контейнер.
Если вы забыли, где находитесь, введите docker ps
. Если это не удается, вы находитесь в док-контейнере.
Редактировать:
Очевидно, этот простой трюк не работает, когда вы запускаете Docker в Docker.
В некотором смысле вы переопределяете поля суперкласса. Но это гораздо проще сделать случайно, потому что нет перегрузки полей (у вас есть только одна переменная с заданным именем, тип не имеет значения). Это называется переменной «скрытие» или «затенение». Итак, вы правы, в результате вы получите два поля с одинаковым именем.
Ваш второй пример верен. Они унаследованы от суперкласса и, поскольку они не объявлены закрытыми, они видны подклассу. Обычно плохая практика - обращаться непосредственно к полям суперкласса, и если нет веских причин, они должны быть объявлены закрытыми. Ваш пример вызова супер-конструктора - лучший подход.
Кроме того, если вы скрываете поле с другим именем, вы по-прежнему можете ссылаться на них как super.x, super.y, против this.x, this.y, вам следует избегать этой ситуации, если это вообще возможно.
В дополнение к тому, что говорили другие: Является ли Тело
точкой
? Нет, Тело
имеет свойство position типа Point
. Поэтому Тело
, вероятно, не должно расширяться Точка
. Если вы избавляетесь от наследования (от реализации), тогда вы избавляетесь от множества проблем. Это и использовать частный
(не защищенный
!) И окончательный
либерально.
Да, у вас будет две переменные, одна скрывает другую. Имеет смысл разрешить это по двум причинам:
Base
и производный класс Derived
, который автор Base
понятия не имеет о. Должен ли автор Base
никогда не иметь возможности добавлять какие-либо поля только потому, что производный класс может разделять поля? Или Derived
прекратить компиляцию, когда изменение Base
на самом деле не влияет на корректность? Я быстро понял, что при этом будут созданы две переменные внутри класса Body с именем x и две другие переменные в Body с именем y , Как это вообще возможно, и почему в Java это разрешено?
На самом деле нет, вы не создаете две переменные с одинаковым именем, очевидно, компилятор не должен и не допустит этого.
Что вы делают теневое копирование существующих переменных, определенных как x
и y
, что означает, что Body.x и Body.y по существу перекрывают имена для Point.x и Point .y, делая последние две переменные полностью недоступными из класса Body ( ссылка на определение «затенения» в спецификации языка Java ).
Затенение имен обычно воспринимается как плохая практика и причина ошибок ,