Видимость конструктора по умолчанию в Java

Я запутался в фактической видимости конструкторов по умолчанию. Мне дали следующий код в книге, которая объясняет, что создан конструктор по умолчанию, но физически не показывает его (т.е. Employee()), несмотря на то, что он назначается автоматически:

public class Employee {
private String name;
private int zip;
private int age;
}

В другой книге мне сказали, что это конструктор по умолчанию, поскольку он не принимает аргументов:

public class Pet {
private String name;
private int weight;

Pet(){}
}

Действительно ли этот последний конструктор используется по умолчанию, если я его физически определяю? Или конструктор по умолчанию невидим для моего кода, как в первом примере, из-за чего-то, связанного с суперклассом?

Изменить: я спрашиваю о физическом коде, который записывается в класс. Один источник говорит мне, что конструктор по умолчанию явно прописан, другой говорит мне, что он не будет отображаться в коде и, по сути, предполагается, что он существует, хотя он не очевиден для пользователя. Моя проблема заключается в том, что явный исходит из учебного пособия по сертификату Java, поэтому это вызывает у меня некоторую путаницу.


person Kevin Kaminski    schedule 10.11.2015    source источник


Ответы (2)


Конструктор по умолчанию является общедоступным конструктором без аргументов. Чтобы быть более конкретным, он имеет тот же уровень доступа, что и класс, поэтому public в классе public, private в классе private и т. д.

Во втором примере вы создаете конструктор уровня доступа к пакету.

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

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

Просто отсутствие аргументов не делает что-то конструктором по умолчанию. Конструктор по умолчанию добавляется компилятором автоматически, у вас вообще нет кода для него.

person Tim B    schedule 10.11.2015

Если вы не пишете никаких конструкторов в своем классе, компилятор Java добавляет конструктор по умолчанию без аргументов. Если вы пишете какие-либо конструкторы в своем классе, то компилятор Java НЕ добавляет в класс конструктор по умолчанию без аргументов.

Пожалуйста, обратитесь к указанному ниже сайту Oracle: https://docs.oracle.com/javase/tutorial/java/javaOO/constructors.html

person developer    schedule 10.11.2015
comment
Но OP спрашивает о видимости неявного ctor. - person Andy Turner; 10.11.2015