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 
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"));
}
}






