[RESOLVIDO] Ajuda sobre Herança: não consigo chamar as classes na classe MAIN

Estou com um trabalho da faculdade sobre Herança, cuja o mesmo é:

Crie uma classe chamada Ingresso que possui um valor em reais e um método
Valor().
a. crie uma classe VIP, que herda Ingresso e possui um valor adicional. Crie um
método que retorne o valor do ingresso VIP (com o adicional incluído).
b. crie uma classe Camarote.
c. Mostre os valores na classe Main

Eu fiz todas as classes com atributos, porem no MAIN estou com dificuldade para chamar as classes. Segue o meu projeto:

Classe Ingresso:

private String nome;
private String CPF;
int preço = 50;

public Ingresso() {
}

public Ingresso(String nome, String CPF, int preço) {
    this.nome = nome;
    this.CPF = CPF;
    this.preço = preço;
}

public Ingresso(int preço) {
    this.preço = preço;
}

public Ingresso(String nome, String CPF) {
    this.nome = nome;
    this.CPF = CPF;
}

public String getNome() {
    return nome;
}

public void setNome(String nome) {
    this.nome = nome;
}

public String getCPF() {
    return CPF;
}

public void setCPF(String CPF) {
    this.CPF = CPF;
}

public void setPreço(int preço) {
    this.preço = preço;
}

public String dados() {
    return "Informações do ingresso: "
            + "\nNome: " + nome
            + "\nCPF: " + CPF
            + "\nTotal pista padrão R$: " + preço;
}

Classe VIP:

package ingressos;

public class Vip extends Ingresso {

private int valorAdicional = 40;

public Vip(String nome, String CPF, int preço, int valorAdicional) {
    super(nome, CPF, preço);
    this.valorAdicional = valorAdicional;
}

public Vip(String nome, String CPF) {
    super(nome, CPF);
    valorAdicional = 40;
}

public void setValorAdicional(int valorAdicional) {
    this.valorAdicional = valorAdicional;
}

@Override
public void setPreço(int preço) {
    super.preço = preço;
}

public int preçoVip() {
    int preçoVip = preço + valorAdicional;
    return preçoVip;
}

@Override
public String dados() {
    return super.dados()
            + "\nValor VIP acrescentado R$: " + valorAdicional
            + "\nValor VIP total R$: " + preçoVip();
}

}

Classe Camarote

package ingressos;

public class Camarote extends Ingresso {

    private int valorExtra = 70;

    public Camarote(String nome, String CPF, int preço, int valorExtra) {
        super(nome, CPF, preço);
        this.valorExtra = valorExtra;
    }

    public Camarote(String nome, String CPF) {
        super(nome, CPF);
        valorExtra = 70;
    }

    public void setValorExtra(int valorExtra) {
        this.valorExtra = valorExtra;
    }

    public int preçoCamarote() {
        int preçoCamarote = setPreço() + valorExtra;
        return preçoCamarote;
    }

    private int setPreço() {
        throw new UnsupportedOperationException("Not supported yet.");
    }

    @Override
    public String dados() {
        return super.dados()
                + "\nValor Camarote a ser acrescentado R$: " + valorExtra
                + "\nValor Camarote total R$: " + preçoCamarote();
    }

}

CLASSE MAIN Aqui está a dificuldade :frowning:

package ingressos;

import javax.swing.JOptionPane;

    public class Main {

        @SuppressWarnings("empty-statement")
        public static void main(String[] args) {

            Vip InVip;
            Ingresso pista;
            Camarote InCamaro;

            String tipo[] = {"Ingresso", "Ingresso VIP", "Camarote", "Sair"};
            String opUsr;

            String nome = JOptionPane.showInputDialog(null, "Nome do cliente:", "ROCK IN PROGRAM", 3);
            String cpf = JOptionPane.showInputDialog(null, "CPF do cliente:", "ROCK IN PROGRAM", 3);
            opUsr = (String) JOptionPane.showInputDialog(null, "Selecione a operação desejada: ", "BANCO ", 3, null, tipo, tipo[0]);

            switch (opUsr) {
                case "Ingresso":
                    pista = new Ingresso(nome, cpf);
                    JOptionPane.showMessageDialog(null, pista.dados(), "ROCK IN PROGRAM", 1);
                    break;

                case "Ingresso Vip":
                    InVip = new Vip(nome, cpf);
                    JOptionPane.showMessageDialog(null, InVip.dados(), "ROCK IN PROGRAM", 1);
                    break;

                case "Camarote":
                    InCamaro = new Camarote(nome, cpf);
                    JOptionPane.showMessageDialog(null, InCamaro.dados(), "ROCK IN PROGRAM", 2);

            }
            while (!opUsr.equals("Sair"));
        }

    }

Retorna algum erro ? Se retornar posta aqui

int preçoCamarote = setPreço() + valorExtra;

Aqui setPreco tá errado o certo é getPreco

1 curtida

Ele só retorna a classe ingresso, ingresso vip e camarote não retorna nada

image

O primeiro deu certo.

O terceiro manda uma Exception dessas, não?

Pq vc não implementou setPreco, nome certo é getPreco.

Tenta aí e dá um feedback dps

Alterado e o continua sem abrir :confused:

@johjohof então cara faz aquelas alterações q te falei e muda essa linha aqui:

Muda esse “Vip” para “VIP” :wink:

Uma dica ‘ç’ fica feio no nome das variáveis

No meu pc funfou que uma blz:
Sem%20t%C3%ADtulo

Sem%20t%C3%ADtulo

Devolve um feedback se funcionou ou se deu ruim

Era isso mesmo! Muito obrigado mano! de verdade mesmo! me salvou em 2,5 pontos haha! pode me explicar o pq o netbeans sugeriu o
private int getPreço() {
throw new UnsupportedOperationException();?

Eu substitui essa linha de código por:

        public int preçoCamarote() {
        int preçoCamarote = preço + valorExtra;
        return preçoCamarote;

No NetBeans simboliza que vc criou o método e não implementou nada nele. Digamos que você criou por criar, aí o NetBeans, que é teu amigo, faz seu programa lançar uma Exception para vc ir lá e mudar alguma coisa nele :slight_smile:

Ás vezes, quando eu peço para ele implementar alguma interface com mais de um contrato acabo deixando algum método com essa exception, mas não é nada de grave.

Que bom 2,5 pontos já ajuda bem, fico feliz em ajudar!

Entendi, muito obrigado :smiley: