Jump to content
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

Tim§id€

Polimorfismo

Recommended Posts

Tim§id€

Boas pessoal,

Ø Crie um método distanciaMaxima que quando for executado num objecto da classe Avião devolva o raio de acção e caso seja utilizado num objecto da classe Carro devolva a distância máxima que pode percorrer tendo em conta a capacidade do deposito e o consumo. Eu tenho 3 Classes:

-Veiculo (atributos Marca,Lugares,Consumo)

-Carro-extends Veiculo (atributio capacidadeDeposito)

-Avião-extends Veiculo

no main tenho

Veiculo veic2=new Carro("Carro1", 2, 7.5, 50);(onde os atributos são Marca,Lugares,Consumo e o ultimo e da class Carro que é capacidadeDeposito)

aqui esta o codigo para distanciaMaxima

public double distanciaMaxima(Veiculo tipoDeVeiculo)
   {


    if (tipoDeVeiculo.getClass()==Aviao.class) {//sei que é aviao

    }
    else//é pq e carro
    {  
		    //Carro devolva a distância máxima que pode percorrer tendo em conta a capacidade do deposito e o consumo.
			return ( 100*aqui tinha que por tipoDeVeiculo.getCapacidadeDeposto) /tipoDeVeiculo.getConsumoCombustivel() );

    }

   }

só que não consigo, será que tenho que fazer de outra maneira?

Obrigado


...º(>_<)º...

Share this post


Link to post
Share on other sites
AJBM

Boas!

tu não tens definido o método getCapacidadeDeposito no veiculo pois não? pelo que percebi está no carro,tenta isto ((Carro)tipoVeiculo).getCapacidadeDeposito

Share this post


Link to post
Share on other sites
Tim§id€

Boas!

tu não tens definido o método getCapacidadeDeposito no veiculo pois não? pelo que percebi está no carro,tenta isto ((Carro)tipoVeiculo).getCapacidadeDeposito

Boas, não, tenho o getCapacidadeDeposito na Class Carro, o atributo da capacidadeDeposito é da Class Carro


...º(>_<)º...

Share this post


Link to post
Share on other sites
pedrotuga

Um problema frequente é não ter bem definido o que se quer fazer antes de nos atirarmos de cabeça ao código. A pergunta, sem dúvida que sugere código como o que tu tens. Se for esse o objectivo, desde já te posso dizer que ele não te vai ensinar a usar o object model em condições.

O que fizeste é a solução óbvia que qualquer principiante se lembraria. Um if para ver qual é o tipo. Polimorfismo é, por definição, não precisar de fazer isso.

A soluçã para este tipo de problemas está na forma como se utilizam os objectos e não tanto na sua implementação. O que se faz nesta situação é o seguinte:

* uma interface 'Veiculo' com um cabeçalo int distanciaMaxima()

* implementa essa interface nas classes carro e avião, isto consiste em usar a keyword implements na definição da classe e a implementar todos os métodos declarados na interface, neste caso: distanciaMaxima()

class Carro implements Veiculo{
   int distanciaMaxima();
}

depois instancia-as da seguinte forma:

Veiculo meyCarro = new Carro();
Veiculo meyAviao = new Aviao();

depois quando quiseres chamar o método, a implementação correspondente é utilizada. Tão simples quanto isso.

Edited by pedrotuga
  • Vote 1

Share this post


Link to post
Share on other sites
Tim§id€

Um problema frequente é não ter bem definido o que se quer fazer antes de nos atirarmos de cabeça ao código. A pergunta, sem dúvida que sugere código como o que tu tens. Se for esse o objectivo, desde já te posso dizer que ele não te vai ensinar a usar o object model em condições.

O que fizeste é a solução óbvia que qualquer principiante se lembraria. Um if para ver qual é o tipo. Polimorfismo é, por definição, não precisar de fazer isso.

A soluçã para este tipo de problemas está na forma como se utilizam os objectos e não tanto na sua implementação. O que se faz nesta situação é o seguinte:

* uma interface 'Veiculo' com um cabeçalo int distanciaMaxima()

* implementa essa interface nas classes carro e avião, isto consiste em usar a keyword implements na definição da classe e a implementar todos os métodos declarados na interface, neste caso: distanciaMaxima()

class Carro implements Veiculo{
int distanciaMaxima();
}

depois instancia-as da seguinte forma:

Veiculo meyCarro = new Carro();
Veiculo meyAviao = new Aviao();

depois quando quiseres chamar o método, a implementação correspondente é utilizada. Tão simples quanto isso.

Boas,

pedrotuga Obrigado pela ajuda! :D :thumbsup:


...º(>_<)º...

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.