1. java
  2. android
  3. c#
  4. .net
  5. javascript
  6. php
  7. jquery
  8. html
  9. sql

Herança. Metodo sem repetir

Oi, preciso de ajuda! Fiz um programa que contem 3 classes que possuem os mesmo métodos. Não consigo pensar em um jeito que eu não tenha que repeti-los nessas 3 classes. Estava pensando em uma classe auxiliar para isso, mas como que eu faço? O programa é o seguinte:

public class Veiculo {

    private String marca, combustivel;
    private int ano, numRodas;

    public Veiculo(String marca, String combustivel, int ano, int numRodas) {
        this.marca = marca;
        this.combustivel = combustivel;
        this.ano = ano;
        this.numRodas = numRodas;
    }

    public String getMarca() {
        return marca;
    }

    public void setMarca(String marca) {
        this.marca = marca;
    }

    public String getCombustivel() {
        return combustivel;
    }

    public void setCombustivel(String combustivel) {
        this.combustivel = combustivel;
    }

    public int getAno() {
        return ano;
    }

    public void setAno(int ano) {
        this.ano = ano;
    }

    public int getNumRodas() {
        return numRodas;
    }

    public void setNumRodas(int numRodas) {
        this.numRodas = numRodas;
    }
}

public class Carro extends Veiculo {

    private int cavalos;
    Carro fichario[] = new Carro[3];

    public Carro(String marca, String combustivel, int ano, int numRodas, int cavalos) {
        super(marca, combustivel, ano, numRodas);
        this.cavalos = cavalos;
    }

    public int getCavalos() {
        return cavalos;
    }

    public void setCavalos(int cavalos) {
        this.cavalos = cavalos;
    }

    public Carro[] getFichario() {
        return fichario;
    }

    public void setFichario(Carro[] fichario) {
        this.fichario = fichario;
    }

    public void editar() {
        Scanner in = new Scanner(System.in);
        System.out.println("Digite a posição que deseja alterar: ");
        int pos = in.nextInt();
        int escolha;
        if (pos >= 0 && pos < 3 && fichario[pos] == null) {
            System.out.println("Digite para alterar: ");
            System.out.println("1-Marca");
            System.out.println("2-Combustivel");
            System.out.println("3-Ano");
            System.out.println("4-Numero de Rodas");
            System.out.println("5-Cavalos");
            System.out.println("6-Cancelar operação");
            escolha = in.nextInt();
            String auxiliar;
            int aux;

            switch (escolha) {
                case 1:
                    System.out.println("digite a marca");
                    auxiliar = in.next();
                    fichario[pos].setMarca(auxiliar);
                    break;
                case 2:
                    System.out.println("digite qual o combustivle");
                    auxiliar = in.next();
                    fichario[pos].setCombustivel(auxiliar);
                    break;
                case 3:
                    System.out.println("digite o ano");
                    aux = in.nextInt();
                    fichario[pos].setAno(aux);
                    break;
                case 4:
                    System.out.println("digite o numero de rodas");
                    aux = in.nextInt();
                    fichario[pos].setNumRodas(aux);
                    break;
                case 5:
                    System.out.println("digite a quantidade de cavalos");
                    aux = in.nextInt();
                    fichario[pos].setCavalos(aux);
                    break;
                case 6:
                    break;
                default:
                    System.out.println("opção inválida");
                    break;
            }
        } else {
            System.out.println("posição inválida!");
        }
    }

    public void imprimir() {
        Scanner in = new Scanner(System.in);
        int pos;
        System.out.println("Digite a posição que deseja consultar:");
        pos = in.nextInt();
        if (pos >= 0 && pos < 3 && fichario[pos] != null) {
            System.out.println("Marca: " + fichario[pos].getMarca());
            System.out.println("Combustivel: " + fichario[pos].getCombustivel());
            System.out.println("Ano: " + fichario[pos].getAno());
            System.out.println("Numero de Rodas: " + fichario[pos].getNumRodas());
            System.out.println("Cavalos: " + fichario[pos].getCavalos());
        } else {
            System.out.println("posição vazia ou inválida");
        }
    }
}
public class Caminhao extends Veiculo {

    private double carga;
    Caminhao fichario[] = new Caminhao[3];

    public Caminhao(String marca, String combustivel, int ano, int numRodas, double carga) {
        super(marca, combustivel, ano, numRodas);
        this.carga = carga;
    }

    public double getCarga() {
        return carga;
    }

    public void setCarga(double carga) {
        this.carga = carga;
    }

    public void editar() {
        Scanner in = new Scanner(System.in);
        System.out.println("Digite a posição que deseja alterar: ");
        int pos = in.nextInt();
        int escolha;
        if (pos >= 0 && pos < 3 && fichario[pos] == null) {
            System.out.println("Digite para alterar: ");
            System.out.println("1-Marca");
            System.out.println("2-Combustivel");
            System.out.println("3-Ano");
            System.out.println("4-Numero de Rodas");
            System.out.println("5-Carga");
            System.out.println("6-Cancelar operação");
            escolha = in.nextInt();
            String auxiliar;
            int aux;

            switch (escolha) {
                case 1:
                    System.out.println("digite a marca");
                    auxiliar = in.next();
                    fichario[pos].setMarca(auxiliar);
                    break;
                case 2:
                    System.out.println("digite qual o combustivle");
                    auxiliar = in.next();
                    fichario[pos].setCombustivel(auxiliar);
                    break;
                case 3:
                    System.out.println("digite o ano");
                    aux = in.nextInt();
                    fichario[pos].setAno(aux);
                    break;
                case 4:
                    System.out.println("digite o numero de rodas");
                    aux = in.nextInt();
                    fichario[pos].setNumRodas(aux);
                    break;
                case 5:
                    System.out.println("digite a quantidade de carga");
                    aux = in.nextInt();
                    fichario[pos].setCarga(aux);
                    break;
                case 6:
                    break;
                default:
                    System.out.println("opção inválida");
                    break;
            }
        } else {
            System.out.println("posição inválida!");
        }
    }

    public void imprimir() {
        Scanner in = new Scanner(System.in);
        int pos;
        System.out.println("Digite a posição que deseja consultar:");
        pos = in.nextInt();
        if (pos >= 0 && pos < 3 && fichario[pos] != null) {
            System.out.println("Marca: " + fichario[pos].getMarca());
            System.out.println("Combustivel: " + fichario[pos].getCombustivel());
            System.out.println("Ano: " + fichario[pos].getAno());
            System.out.println("Numero de Rodas: " + fichario[pos].getNumRodas());
            System.out.println("Carga: " + fichario[pos].getCarga());
        } else {
            System.out.println("posição vazia ou inválida");
        }
    }
}
public class Moto extends Veiculo {

    private int cilindradas;
    Moto fichario[] = new Moto[3];

    public Moto(String marca, String combustivel, int ano, int numRodas, int cilindradas) {
        super(marca, combustivel, ano, numRodas);
        this.cilindradas = cilindradas;
    }

    public int getCilindradas() {
        return cilindradas;
    }

    public void setCilindradas(int cilindradas) {
        this.cilindradas = cilindradas;
    }

    public void editar() {
        Scanner in = new Scanner(System.in);
        System.out.println("Digite a posição que deseja alterar: ");
        int pos = in.nextInt();
        int escolha;
        if (pos >= 0 && pos < 3 && fichario[pos] == null) {
            System.out.println("Digite para alterar: ");
            System.out.println("1-Marca");
            System.out.println("2-Combustivel");
            System.out.println("3-Ano");
            System.out.println("4-Numero de Rodas");
            System.out.println("5-Cilindradas");
            System.out.println("6-Cancelar operação");
            escolha = in.nextInt();
            String auxiliar;
            int aux;
            switch (escolha) {
                case 1:
                    System.out.println("digite a marca");
                    auxiliar = in.next();
                    fichario[pos].setMarca(auxiliar);
                    break;
                case 2:
                    System.out.println("digite qual o combustivle");
                    auxiliar = in.next();
                    fichario[pos].setCombustivel(auxiliar);
                    break;
                case 3:
                    System.out.println("digite o ano");
                    aux = in.nextInt();
                    fichario[pos].setAno(aux);
                    break;
                case 4:
                    System.out.println("digite o numero de rodas");
                    aux = in.nextInt();
                    fichario[pos].setNumRodas(aux);
                    break;
                case 5:
                    System.out.println("digite a quantidade de cilindradas");
                    aux = in.nextInt();
                    fichario[pos].setCilindradas(aux);
                    break;
                case 6:
                    break;
                default:
                    System.out.println("opção inválida");
                    break;
            }
        } else {
            System.out.println("posição inválida!");
        }
    }

    public void imprimir() {
        Scanner in = new Scanner(System.in);
        int pos;
        System.out.println("Digite a posição que deseja consultar:");
        pos = in.nextInt();
        if (pos >= 0 && pos < 3 && fichario[pos] != null) {
            System.out.println("Marca: " + fichario[pos].getMarca());
            System.out.println("Combustivel: " + fichario[pos].getCombustivel());
            System.out.println("Ano: " + fichario[pos].getAno());
            System.out.println("Numero de Rodas: " + fichario[pos].getNumRodas());
            System.out.println("Cilindradas: " + fichario[pos].getCilindradas());
        } else {
            System.out.println("posição vazia ou inválida");
        }
    }
}

public class Main {

    public static void main(String[] args) {

        Carro lista[] = new Carro[3];
        Moto lista1[] = new Moto[3];
        Caminhao lista2[] = new Caminhao[3];


        lista[0] = new Carro("VW", "Gasolina", 2010, 4, 32);
        lista[1] = new Carro("Fiat", "Gasolina", 1997, 4, 12);
        lista[2] = new Carro("Land Rover", "Gasolina", 2013, 4, 200);

        lista1[0] = new Moto("Honda", "Gasolina", 2012, 2, 125);
        lista1[1] = new Moto("Yamaha", "Gasolina", 2012, 2, 200);
        lista1[2] = new Moto("Honda", "Gasolina", 2012, 2, 125);

        lista2[0] = new Caminhao("Iveco", "Gasolina", 2012, 2, 10000);
        lista2[1] = new Caminhao("Mercedes", "Alcool", 2012, 2, 2003323);
        lista2[2] = new Caminhao("Fiat", "Alcool", 2012, 2, 125312);

        int op;
        Scanner in = new Scanner(System.in);
        System.out.println("O que você deseja?");
        System.out.println("1 - Imprimir Carro");
        System.out.println("2 - Editar Carro");
        System.out.println("3 - Imprimir Moto");
        System.out.println("4 - Editar Moto");
        System.out.println("5 - Imprimir Caminhao");
        System.out.println("6 - Editar Caminhao");
        System.out.println("7 - Sair");

        op = in.nextInt();
        switch (op) {
            case 1:
                lista[2].imprimir();
                break;
            case 2:
                lista[2].editar();
                break;
            case 3:
                lista1[2].imprimir();
                break;
            case 4:
                lista1[2].editar();
                break;
            case 5:
                lista2[2].imprimir();
                break;
            case 6:
                lista2[2].editar();
                break;
            case 7:
                break;
            default:
                System.out.println("Opção inválida!");
                break;
        }
        while (op != 7);
    }
}
  • Formate melhor a sua pergunta. na barra de ferramentas da criação da pergunta tem um botão que o ícone é 101010, clica nele e insira seu codigo dentro das marcações para que ele fique formatado.

    Leonardo Soares   15 de mar de 2014
  1. Você vai ver essas setas em qualquer página de pergunta. Com elas, você pode dizer se uma pergunta ou uma resposta foram relevantes ou não.
  2. Edite sua pergunta ou resposta caso queira alterar ou adicionar detalhes.
  3. Caso haja alguma dúvida sobre a pergunta, adicione um comentário. O espaço de respostas deve ser utilizado apenas para responder a pergunta.
  4. Se o autor da pergunta marcar uma resposta como solucionada, esta marca aparecerá.
  5. Clique aqui para mais detalhes sobre o funcionamento do GUJ!

2 respostas

Não é a resposta que estava procurando? Procure outras perguntas com as tags herança ou faça a sua própria pergunta.