herança

21 respostas
J

gostaria de abrir um novo tópico agora aprendendo um pouco sobre herança

tenho a classe veículo ± assim:

classe veículo

public class veiculo {
       private long identificador;
       private int velocidade;
       private string direcao;

      public setIdentificador(long i) {
                      this.identificador = i;

             }
           

        public long getIdentificador () {
            return indentificador;
}

agora quero que a classe motorista( atributos: nome, veiculo) passe a herdar os dados da classe veículo

como posso fazer isso!

21 Respostas

kdoigor
public class motorista extends veiculo{}
J

e se eu utilizar o método de construtores altera o comando ?

WendersonLP

Olha eu acho que essa lógica está incorreta. Porque quando se criar uma classe como veículo a tendência é
que um determinado tipo de veículo à extenda e não um motorista, entendeu? Um motorista deveria herdar
de uma classe do tipo pessoa e não de veículo, porque o motorista é quem conduz o veículo mas não é um.

pedroroxd

Que comando?
É a classe que extende otra classe…

J

é que minha proposta está confusa então

vou melhorar então um pouco:

motorista dirige veiculo

será que da certo ?

como utilizar o conceito de herança aqui

rmendes08

Não usa, simples assim. O relacionamento motorista - dirige - veículo é do tipo USA-UM, e não do tipo É-UM. Observe:

(a) motorista USA-UM veículo

(b) motorista É-UM veículo

repare que a proposição (a) faz muito mais sentido do que (b). Sendo assim, herança não é a opção para o seu motorista acessar o veículo, basta você passar um objeto veículo para o método que deve utilizá-lo.

ramos

O que você quer fazer não é herança, é agregação.

Se um motorista dirige um veículo, logo a classe motorista precisa ter um atributo que guarde uma referência para qual veículo ele dirige.

Um exemplo desta agregação poderia ser implementado assim:

public class Veiculo {   
       private long identificador;   
       private int velocidade;   
       private string direcao;   
  
      public setIdentificador(long i) {   
                      this.identificador = i;   
  
             }   
             
  
        public long getIdentificador () {   
            return indentificador;   
}  

public class Motorista {
  private String nome;
  private Veiculo veiculo;

  public Veiculo getVeiculo() { return veiculo; }
  public void setVeiculo(Veiculo veiculo) { this.veiculo = veiculo;}
}

Você usaria herança se quisesse criar tipos mais especializados de veículos. Por exemplo um ônibus.

public class Onibus extends Veiculo {
  public int limiteDePassageiros;
}
Espero ter ajudado.
J

string, long e int então fica como classe e não como tipo de variável, seria isso ?

J

e se eu precisar declarar um variavel do tipo string para direcao atual,

private String direcao;
ramos

Se for sobre a minha resposta, não seria isso. Neste caso, preciso que você detalhe melhor sua última pergunta para que eu tentar ser mais claro. :slight_smile:

J

para Ramos:

não sei se estou certo, mas eu disse que em sua implementação long, int e string será acessado como classe e não como variável stática. :slight_smile:

J

vou exemplificar o que entendi:

se eu colocar um método para o veículo frear e outro para o veículo acelerar como eu iria declarar a variável como string ou int:

ramos

Então. Sobre os tipos em Java, existe uma particularidade que eu não sei se você já sabe:

  • String é objeto e não tipo primitivo

Fora isto, talvez você tenha estranhado o fato de eu ter colocado a variável limiteDePassageiros com modificador public ao invés de declará-la como private e usar métodos do tipo set e get.

Se estiver falando disto, eu fiz public por causa da pressa na digitação mesmo! rs…

Deste modo a classe Onibus ficou sem encapsulamento.

Você está usando qual material pra estudar Java?

ramos
Jose_48:
vou exemplificar o que entendi:

se eu colocar um método para o veículo frear e outro para o veículo acelerar como eu iria declarar a variável como string ou int:

Vou fazer uma classe mais resumida aqui pra tentarmos usar de exemplo para o caso que você falou.

public class Veiculo {
  private int velocidade;

  public void acelerar() {
    velocidade = velocidade + 1;
  }

  public void frear() {
    velocidade = 0;
  }
}

Neste caso, a velocidade ficou encapsulada (protegida) e só pode ser alterada pelos métodos acelerar e frear.

Este exemplo ficou claro?

J

Ramos:

eu tenho comigo Use a cabeça! Java e Apostila Caelum_Java_objetos. :shock:

J

Ramos:

o exemplo ficou claro quanto a declaração de variável

mas veja que se eu precisar avançar o veiculo na classe motorista eu teria que ir de um em um certo … e dai como ficaria : :?:

ramos

Este “Java, Use a Cabeça!” parece muito legal.

Pelas propagandas parece que tem uns exemplos bem empolgantes.

O material da Caelum eu não conheço, mas deve ser legal.

Muito tempo atrás eu estudei um PDF “Introdução ao Java” que era bastante didático. Mas ela está meio ultrapassada para as versões atuais do Java. Os exemplos usam uma versão antiga do AWT, etc.

Se eu fosse te dar um conselho, diria pra você ir com calma, entendendo todos os exemplos que estudasse.

Também é tem que persistir, porque não dá pra aprender tudo do dia pra noite quando. Mas de uma semana pra outra dá pra entender alguma coisa já. :wink:

ramos
Jose_48:
Ramos:

o exemplo ficou claro quanto a declaração de variável

mas veja que se eu precisar avançar o veiculo na classe motorista eu teria que ir de um em um certo .... e dai como ficaria : :?:

Vamos lá:

public class Motorista {
  Veiculo meuVeiculo;

  public void passear() {
    meuVeiculo = new Veiculo();
    meuVeiculo.acelerar();
    meuVeiculo.acelerar();
    meuVeiculo.acelerar(); // velocidade já está valendo 3 esta hora

    meuVeiculo.frear();
  }
}

Neste caso, quando a classe Motorista tem um atributo meuVeiculo do tipo Veiculo.

Quando for chamado o método passear, será criada uma instância do veiculo que será manipulada através dos métodos acelerar e frear.

PS: Vou usar este exemplo no meu livro :D

J

e seu eu colocasse uma estrutura while

veiculo_parado < velocidade e pedir para acelerar

como fica a implementação:

acho que agora eu viajei não foi…

ramos

Você está pegando o espírito do negócio.

É só você fazer do jeito que você falou.

Precisaria apenas adicionar um método int getVelocidade na classe Veiculo que escrevi acima e depois usá-lo na classe Motorista.

Experimente fazer como exercício que é uma boa.

J

ok pessoal

estou me divertindo com o java

obrigado a todos pela atenção!

Criado 29 de abril de 2010
Ultima resposta 30 de abr. de 2010
Respostas 21
Participantes 6