Questão de Programação — JEE (Java Enterprise Edition) — Quadrix 2025
- Código
- qg603655
- Banca
- Quadrix
- Órgão
- SEDF
- Ano
- 2025
- Nível
- Superior
- Cargo
- Professor de Educação Básica: Informática
- CCerto
- EErrado
GabaritoE — Errado
Gabarito: ERRADO. O construtor public Produto(String nome, int quantidade, double preco) inicializa os atributos da classe, mas não é um método com retorno implícito do tipo Produto — na verdade, um construtor não possui tipo de retorno algum, nem mesmo void. A afirmação mistura dois conceitos distintos da linguagem Java: o construtor (que inicializa objetos) e o método (que pode ter retorno). A fonte é a própria especificação da linguagem Java e o material de apoio sobre construtores.
O construtor é um bloco de código especial, invocado no momento da criação do objeto com a palavra-chave new. Sua função é inicializar o estado do objeto — ou seja, atribuir valores iniciais aos atributos da instância. No código apresentado, o construtor recebe três parâmetros (nome, quantidade, preco) e os utiliza para preencher os atributos correspondentes da classe Produto.
A confusão que a banca explora aqui é sutil e recorrente: o construtor parece um método porque tem nome, parâmetros e corpo, mas ele é uma categoria própria. A diferença fundamental está na declaração: um método comum declara um tipo de retorno (como double, void, String), enquanto o construtor não declara nenhum tipo de retorno — e isso não é um "retorno implícito", é a ausência total de retorno. Se você tentasse escrever public Produto Produto(...), o compilador acusaria erro, pois o construtor não pode ter tipo de retorno declarado.
Outra diferença crucial: o construtor é chamado automaticamente quando o objeto é criado com new, enquanto um método comum precisa ser invocado explicitamente. No código, new Produto("Notebook", 5, 4500.00) dispara o construtor; já p.calcularValorTotal() é uma chamada explícita a um método. O construtor também tem a restrição de que seu nome deve ser idêntico ao nome da classe — Produto —, o que não se aplica a métodos comuns.
Para fixar: o construtor não retorna nada, nem implicitamente. O que ele faz é produzir um objeto inicializado como efeito colateral da operação new. O objeto criado é o resultado da expressão new Produto(...), mas isso não significa que o construtor "retorna" o objeto — o retorno é da expressão new, não do construtor. Essa distinção é o coração da pegadinha.
Na prova, quando a questão falar em "retorno implícito" de construtor, desconfie imediatamente. Construtor não tem retorno, ponto final. Para diferenciar na hora: método tem tipo de retorno na assinatura (ou void); construtor tem apenas o nome da classe. Se a assinatura começa com o nome da classe e não tem tipo de retorno, é construtor.
A afirmação contém dois erros entrelaçados. Primeiro, diz que o construtor é "um método" — mas construtor não é método, é uma categoria especial. Segundo, afirma que ele tem "retorno implícito do tipo Produto" — mas construtor não tem retorno nenhum, nem implícito. O que existe é que a expressão new Produto(...) avalia para um objeto do tipo Produto, mas isso é propriedade do operador new, não do construtor. O construtor apenas inicializa os atributos; quem "entrega" o objeto é a operação de criação. Portanto, a assertiva está errada.
Gabarito: ERRADO — o construtor inicializa os atributos, mas não é método e não possui retorno implícito.
Link permanente: /questoes/qg603655