Fórum Polimorfismo - Java #598154
24/10/2018
0
Pois eu estou com um pequeno problema na minha funcao fazerDecolar(), onde eu faco a verificacao se for Aviao ou Helicoptero, eu chamo o metodo de acordo com o tipo do objeto, usando o instanceof e depois fazendo o casting para minha classe mais especifica.
[code=java][/import java.util.*;
public class Principal {
public static int gerarNumeroAleatorio() {
Random gerador = new Random();
int num = gerador.nextInt(100);
return num;
}
public static int gerarTamanhoArray() {
Random gerador = new Random();
int index = gerador.nextInt(100);
return index;
}
public static Voador[] criaArray(Voador array[]) {
int index = Principal.gerarTamanhoArray();
for(int i=0;i<index;i++) {
int aux = new Principal().gerarNumeroAleatorio();// chamada da função que gerara numero aleatorio para decidir se sera criado objeto Aviao ou Helicoptero
if(aux%2==0) {
array[i] = new Aviao();
}else if(aux%2!=0) {
array[i] = new Helicoptero();
}
}
return array;
}
public static Voador[] fazerDecolar(Voador array[]) {
new Principal().criaArray(array);
for(int i=0;i<array.length;i++) {
if(array[i] instanceof Aviao) {
Aviao a = (Aviao)array[i].ligarTurbina(); -> erro aqui, compilador diz q ligarTurbina esta indefinido pra Voador
}else if(array[i] instanceof Helicoptero) {
Helicoptero h = (Helicoptero)array[i].ligarHelice(); -> msm erro de cima so q pra funcao ligarHelice
}
}
return array;
}
public static void main(String[] args) {
int index = Principal.gerarTamanhoArray();
Voador [] a1 = new Aeronave[index];
Principal.criaArray(a1);
Principal.fazerDecolar(a1);
}
}
]
Lembrando que eu tenho a classe abstract Aeronave, a interface Voador, e as minhas duas classe concretas Helicoptero e Aviao, sendo q estas duas herdam Aeronave e implementam Voador respectivamente.
Wendel Rios
Curtir tópico
+ 0Post mais votado
08/11/2018
- Primeiro seus métodos ligarTurbina() e ligarHelice() são void, então você nunca vai conseguir retornar um objeto Aviao ou Helicoptero para as variáveis 'a' e 'h'.
- Seu array é do tipo Voador e Voador não tem os métodos ligarTurbina() e ligarHelice(), embora eles também não retornem nada.
- Mesmo fazendo o cast com Aviao e Helicoptero, o retorno do cast vale para a variável de atribuição e não para o objeto array. Os métodos ligarXxx() existem só depois que o cast tiver sido retornado e não antes.
Então você tem duas formas de resolver, a primeira é essa:
/Aviao a = (Aviao)array[i].ligarTurbina();//trecho onde eh ocorre o erro Aviao a = (Aviao)array[i]; a.ligarTurbina();
Veja que primeiro fazemos o cast e o objeto Aviao é retornado a variável 'a'. Só depois a gente acessa o método ligarTurbina().
A segunda forma é mais direta, parecida com a que você estava usando:
/Aviao a = (Aviao)array[i].ligarTurbina();//trecho onde eh ocorre o erro ((Aviao) array[i]).ligarTurbina();
Note a diferença. Ela está nos parenteses. Primeiro temos o cast que vai retornar um objeto Aviao: (Aviao) array[i]
Depois colocamos esse retorno, ou seja, a própria declaração entre um par de parenteses: ( (Aviao) array[i] )
Agora sim tem um objeto Aviao e podemos acessar seu métodos: ( (Aviao) array[i] ).ligarTurbina();
Marcio Souza
Gostei + 1
Mais Posts
08/11/2018
Marcio Souza
Gostei + 0
08/11/2018
Wendel Rios
package faculdade.poo.arrays;
public interface Voador {
public abstract void voar();
}Classe Aeronave
package faculdade.poo.arrays;
public abstract class Aeronave implements Voador {
public void ligarTurbina() {
System.out.println("Aeronave ligando turbina");
}
public void ligarHelice() {
System.out.println("Aeronave ligando helice");
}
}Classe Aviao
package faculdade.poo.arrays;
public class Aviao extends Aeronave implements Voador{
@Override
public void ligarTurbina() {
System.out.println("Aviao ligando turbina");
}
public void voar() {
System.out.println("Aviao voando");
}
}Classe Helicoptero
package faculdade.poo.arrays;
public class Helicoptero extends Aeronave implements Voador{
@Override
public void ligarHelice() {
System.out.println("Helicoptero ligando helices");
}
public void voar() {
System.out.println("Helicoptero voando");
}
}Classe Principal
package faculdade.poo.arrays;
import java.util.*;
public class Principal {
public static int gerarNumeroAleatorio() {
Random gerador = new Random();
int num = gerador.nextInt(100);
return num;
}
public static int gerarTamanhoArray() {
Random gerador = new Random();
int index = gerador.nextInt(100);
return index;
}
public static Voador[] criaArray(Voador array[]) {
int index = Principal.gerarTamanhoArray();
for(int i=0;i<index;i++) {
int aux = new Principal().gerarNumeroAleatorio();// chamada da função que gerara numero aleatorio para decidir se sera criado objeto Aviao ou Helicoptero
if(aux%2==0) {
array[i] = new Aviao();
}else if(aux%2!=0) {
array[i] = new Helicoptero();
}
}
return array;
}
public static Voador[] fazerDecolar(Voador array[]) {
new Principal().criaArray(array);
for(int i=0;i<array.length;i++) {
if(array[i] instanceof Aviao) {
Aviao a = (Aviao)array[i].ligarTurbina();//trecho onde eh ocorre o erro
}else if(array[i] instanceof Helicoptero) {
Helicoptero h = (Helicoptero)array[i].ligarHelice();//trecho onde ocorre o erro
}
}
return array;
}
public static void main(String[] args) {
int index = Principal.gerarTamanhoArray();
Voador [] a1 = new Aeronave[index];
Principal.criaArray(a1);
Principal.fazerDecolar(a1);
}
}Gostei + 0
08/11/2018
Wendel Rios
Gostei + 0
08/11/2018
Marcio Souza
Isso mesmo e ainda tinha o problema dos seus métodos serem void e as variáveis precisavam de objetos Aviao e Helicoptero.
T+
Gostei + 1
08/11/2018
Wendel Rios
T+
Sim, sim tinha esse problema tb, ja acertei o codigo e rodou tudo certinho, brigadoo.
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)