O que seria variavel com nome de classe?

8 respostas
F

O que seria quando agente tem uma variável com nome de outra classe, assim: private Motorista motorista;?

8 Respostas

R

Seria uma variável que tem os métodos dessa classe, não muda nada das variáveis que você está acostumado.
String por exemplo, é uma classe nativa do java, onde você pode criar uma variável que tem os métodos que ela fornece.

Jederson_Andre

Assim vc pode acessar os atributos tbm da classe Motorista

F

Isso me parece similar a herança, seria isso msm?

D

Seria só uma identificação da variável, o nome pode ser qualquer um. Quando o nome da variável é igual a da classe, costuma fazer mais sentido em situações como:

Motorista motorista;
Carro carro;
motorista.dirigeO(carro); // motorista dirige o carro

Motorista cachorro;
Carro discoVoador;
cachorro.dirigeO(discoVoador); // cachorro dirige o disco voador
Jonathan_Medeiros

Isso vem a ser a declaração de um atributo da sua classe que por sua vez assume o tipo de um modelo, por exemplo, digamos que você possua 2 model, um de cor e outro de produto:

public class Cor {
    private Integer Id;
    private String Descricao;

    //Implementação
}

public class Produto {
    private Integer Id;
    private String Descricao;
    private Cor cor; //A partir daqui conseguimos acessar o Id e Descrição da cor dentro de sua própria classe partindo do produto, desta forma evitamos a duplicação de código como por exemplo declarar mais 2 atributos na classe produto para representar o Id e Descrição da cor.

     //Implementação
}

Considere o exemplo acima apenas com 2 atributos, agora pense desta forma em uma classe onde você possua N atributos.

staroski

Exatamente!
E sempre procure utilizar nomes de variáveis que façam sentido com o propósito da variável, como no exemplo acima.

Agora imagine se alguém escreve código assim:

Motorista xyz;
Carro abc;
xyz.dirigeO(abc); // é difícil de entender

Ou pior:

Motorista carro;
Carro motorista;
carro.dirigeO(motorista); // parece completamente sem sentido
F

Então, mas aqui não seria quase igual eu criar herança?

public class Produto extends Cor {

}

Aqui também consigo acessar os atributos de Cor.

Jonathan_Medeiros

São coisas distintas!

Perceba, a partir do exemplo que citei na resposta anterior o acesso se dá por meio da classe de origem partindo para a destino, exemplo:

produto.getCor().GetId(); //Classe produto, Classe Cor, Atributos da Classe Cor.
produto.getCor().GetDescricao();

Utilizando da Herança conforme você citou o acesso se dá diretamente pela classe de origem, exemplo:

produto.GetId(); //Classe produto, Atributo da Classe Cor.
produto.GetId(); //Classe produto, Atributo da Classe Produto.

Apesar de obtermos um mesmo resultado, o uso ocorre de forma totalmente diferente.

(Meu ponto de vista ao uso de Herança)
Edit: Vale destacar que em uma situação em que não serão utilizados todos os elementos e métodos da classe da qual está estendendo não faz sentido você utilizar Herança.

Criado 2 de abril de 2018
Ultima resposta 2 de abr. de 2018
Respostas 8
Participantes 6