Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

blacktrindade

Herança para Iniciante

Recommended Posts

Olá amigos, hoje começei a aprender sobre Herança no java... já estou com um problema, criei uma classe ingresso onde tem Ingresso onde ele possui a subclasse VIP - esta sublclasse possui duas classes filhas CamaroteSuperior e CamaroteInferior, nestas classes o valor do ingresso muda, tem a taxa do ingresso VIP e a taxa do ingresso CamaroteSuperior..

 

O problema é o seguinte, ele não pega o valor do ingresso que está na classe mãe Ingresso... podem me ajudar?

 

 

Classe Ingresso

public class Ingresso {
    double valorIngresso;
    
    public void SetIngresso(double Ingresso){
        valorIngresso = Ingresso;
    }
    
    public String imprimeValor(){
        return "Valor do ingresso: R$" + valorIngresso;
    }
    
}

Classe Ingresso Normal

public class Normal extends Ingresso {
    private double valor = valorIngresso;
    
    public String IngressoNormal() {
        return "Ingresso normal: " + valor;
    }
}

Classe VIP

public class VIP extends Ingresso {
    private double valorAdicional = 80;
    
    public String ingressoVip() {
        valorIngresso = valorIngresso + valorAdicional;
       return "Ingresso VIP: " + valorIngresso;
    }
}    
 

Classe CamaroteSuperior

public class CamaroteSuperior extends VIP {
    private double taxaSuperior = 30;
    private double valor = valorIngresso + taxaSuperior;
    private String localizacaoIngresso;
    
    public void setLocalizacao(String localizacao){
        localizacaoIngresso = localizacao;
    }
    
    public String getLocalizacao() {
        return "Localização do Ingresso: " + localizacaoIngresso;
    }
    
    public String camaroteSuperior() {
        return "Ingresso do camarote superior: R$" + valor;
    }  
}

Classe CamaroteInferior

public class CamaroteInferior extends VIP {
    private String localizacaoIngresso;
    
    public void setLocalizacao(String localizacao){
        localizacaoIngresso = localizacao;
    }
    
    public String getLocalizacao() {
        return "Localização do Ingresso: " + localizacaoIngresso;
    }  
}

Classe de Teste:

import javax.swing.*;

public class testarIngresso {
    public static void main(String[] args){
        Ingresso ingresso = new Ingresso();
        
        ingresso.SetIngresso(100);
        System.out.println(ingresso.imprimeValor());
        String tipoIngresso = JOptionPane.showInputDialog("Digite 1 para Normal e 2 para VIP:");
        
        if(tipoIngresso.equals("2")){
           String camarote = JOptionPane.showInputDialog("Digite 1 para Camarote Superior e 2 para Camarote Inferior:");
            if(camarote.equals("1")){
                CamaroteSuperior vip1 = new CamaroteSuperior();
                vip1.setLocalizacao("Camarote Superior");
                System.out.println(vip1.getLocalizacao());
                System.out.println(vip1.camaroteSuperior());
            } else {
                CamaroteInferior vip2 = new CamaroteInferior();
                System.out.println(vip2.ingressoVip());
            }
        } else {
            System.out.println(ingresso.imprimeValor());
        }
    
    }
    
}

Por que será que não está levando o valor R$100 para as outras sub-classes?


Pessoal aconteceu a mesma coisa com a classe Imovel que tem que pegar o valor do imovel e descontar um valor se for velho e adicionar um valor se for novo:

 

Classe Imovel:

public class Imovel {
    protected String endereco;
    protected double preco;
    
   public void SetEndereco(String end){
       endereco = end;
   }
   
   public String GetEndereco(){
       return "Endereço: " + endereco;
   }
   
   public void SetPreco(double prec){
       preco = prec;
   }
   
   public String GetPreco(){
       return "Preço: " + preco;
   }
}

Classe Novo:

public class Novo extends Imovel {
    private double valorAdicional = preco + 12000;
    
    public void setValor(double valor){
        valorAdicional = valor;
    }
    
    public String getNovo(){
        return "Valor do imovel novo: " + valorAdicional;
    }
}

Classe Velho:

public class Velho extends Imovel {
    private double valorVelho = preco - 12000;
    
    public void setValor(double valor){
        valorVelho = valor;
    }
    
    public String getVelho(){
        return "Valor do imovel velho: " + valorVelho;
    }
}

Classe testarImovel:

import javax.swing.*;

public class testarImovel {
    public static void main(String[] args){
        Imovel casa = new Imovel();
        
        casa.endereco = "Rua montevideu";
        casa.preco = 100000;
        
        String imovel = JOptionPane.showInputDialog("Digite 1 para NOVO e 2 para VELHO:");
        
        if(imovel.equals("1")){
            Novo novo = new Novo();
            System.out.println(novo.getNovo());
        } else if(imovel.equals("2")){
            Velho velho = new Velho();
            System.out.println(velho.getVelho());
        } else {
            System.out.println("Erro você deve inserir 1 ou 2");
        }
    }
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Levar valor?

 

Herança é apenas herança, herda características da classe e não de suas instâncias.

 

Se você instância uma classe PAI, seta valores, esses valores não serão herardados nas instâncias de classe FILHA. São coisas distintas.

 

Me parece, pelos exemplos, que você não tem casos de herança, mas sim de acoplamento ou coesão.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Levar valor?

 

Herança é apenas herança, herda características da classe e não de suas instâncias.

 

Se você instância uma classe PAI, seta valores, esses valores não serão herardados nas instâncias de classe FILHA. São coisas distintas.

 

Me parece, pelos exemplos, que você não tem casos de herança, mas sim de acoplamento ou coesão.

 

então neste caso eu teria que criar uma função para setar o valor dos ingressos em cada classe?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você pode passar a instância do objeto Imovel como parâmetro para seus outros objetos das classes Novo e Velho.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você pode passar a instância do objeto Imovel como parâmetro para seus outros objetos das classes Novo e Velho.

 

Desculpa não entendi e nem imagino a forma de como vou fazer isto, sou novato :/

Compartilhar este post


Link para o post
Compartilhar em outros sites

Exemplo rápido...

 

 

public class Novo {
    private double valorAdicional = 12000;
 
    public void Novo (Imovel imovel) {
         this.setValor(imovel.preco + valorAdicional);
    }

...
 
}

 

 

import javax.swing.*;

public class testarImovel {
    public static void main(String[] args){
        Imovel casa = new Imovel();
...

        if(imovel.equals("1")){
            Novo novo = new Novo(casa);
            System.out.println(novo.getNovo());
        }
... 

}

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.