É recomendado instanciar com tipo da superclasse ou subclasse?

3 respostas
javaherança
H

Na seguinte situação, é recomendado instanciar assim “Livro p=new Livro();” ou “Produto p=new Livro()

public Class Produto{
private String nome;

public void setNome(){

}

public Class Livro extends Produto{

private String autor;

public void  setAutor(){

}
}

3 Respostas

S

Você só está instanciando com o tipo da subclasse.
Se fosse instanciar a superclasse, você faria new Produto().
Agora se a variável precisa ser do tipo da superclasse ou do tipo da subclasse, vai depender do seu código.
Se você precisa acessar membros que só existem na subclasse, a variável deveria ser do tipo da subclasse, senão pode ser do tipo da superclasse.

H

Então vai depender da situação né? achei que fazendo “Produto p=new Livro();” era uma forma de encapsulamento

S

Não, o nome disso é polimorfismo. Você tem uma variável de um tipo de dado (Produto) mas na verdade ela referencia outro tipo (Livro).

Encapsulamento é você esconder características de sua implementação (geralmente com a palavra reservada private) e fornecer métodos para obter as informações que deseja.

Criado 20 de agosto de 2018
Ultima resposta 20 de ago. de 2018
Respostas 3
Participantes 2