As práticas modernas de desenvolvimento em Java valorizam o uso de construtores personalizados e sobrecarregados, o que permite versatilidade na criação de objetos. Considere o trecho de código abaixo: ```java public class Produto { private String nome; private double preco; public Produto() { this.nome = "Sem nome"; this.preco = 0.0; } public Produto(String nome, double preco) { this.nome = nome; this.preco = preco; } } ``` Agora, assinale a alternativa que descreve corretamente um conceito avançado relacionado à sobrecarga de construtores.
Questão
As práticas modernas de desenvolvimento em Java valorizam o uso de construtores personalizados e sobrecarregados, o que permite versatilidade na criação de objetos.
Considere o trecho de código abaixo:
public class Produto {
private String nome;
private double preco;
public Produto() {
this.nome = "Sem nome";
this.preco = 0.0;
}
public Produto(String nome, double preco) {
this.nome = nome;
this.preco = preco;
}
}
Agora, assinale a alternativa que descreve corretamente um conceito avançado relacionado à sobrecarga de construtores.
Alternativas
a) O construtor-padrão com parâmetros sobrescreve obrigatoriamente o construtor sem parâmetros.
b) A classe Produto viola o encapsulamento por não declarar métodos get e set.
c) O uso de dois construtores com assinaturas diferentes caracteriza a sobrecarga, que permite múltiplas formas de instanciar objetos.
d) A palavra-chave this impede a criação de instâncias com valores dinâmicos.
e) O compilador não reconhece mais de um construtor dentro da mesma classe.
Explicação
Em Java, sobrecarga (overload) de construtores ocorre quando uma classe declara mais de um construtor com o mesmo nome da classe, porém com listas de parâmetros diferentes (assinaturas diferentes).
No código, existem:
Produto()(sem parâmetros), que define valores padrão;Produto(String nome, double preco)(com parâmetros), que inicializa o objeto com valores informados.
Isso caracteriza exatamente a sobrecarga e oferece múltiplas formas de instanciar a classe, por exemplo:
new Produto()cria um produto com valores padrão;new Produto("Caderno", 19.9)cria um produto com valores específicos.
Analisando as alternativas:
- (a) está errada: não existe “sobrescrita obrigatória” entre construtores; construtores não são sobrescritos, são sobrecarregados.
- (b) está errada: ausência de getters/setters pode ser uma decisão de design; não implica violação automática do encapsulamento (os atributos continuam
private). - (d) está errada:
thisapenas referencia o objeto atual e ajuda a diferenciar atributos/parâmetros; não impede valores dinâmicos. - (e) está errada: o compilador reconhece vários construtores, desde que as assinaturas sejam diferentes.
Alternativa correta: (c).