Exercicio simples de Herança

Ae galera, sou novo aqui no fórum como também to começando a aprender Java :lol:

Poderiam me ajudar a resolver esse exercício aqui?:

Considere a seguinte função em linguagem C.
double calcularMensalidade(int tipoAluno,
int qtdIrmaos)
{
double desconto=0, mensalidade;
if (tipoAluno == 0) mensalidade = 0;
else if (tipoAluno == 1) mensalidade = 500;
if (qtdIrmaos == 1) desconto=0.05;
else if (qtdIrmaos == 2) desconto=0.1;
else if (qtdIrmaos > 2) desconto =0.15;
return mensalidade - mensalidade*desconto;
}
Reescreva enquadrando-a em uma hierarquia de classes em Java.

Parece ser bem simples, mas como ainda não tenho muita segurança na programação em Java, to pedindo um auxílio aqui

Vlw

Poste o que você já tentou fazer, ou como você imagina solucionar o problema.

E não esqueça das tags code:
http://www.guj.com.br/posts/list/50115.java

Eu acho que consegui fazer , mas eu tenho a impressão que não fiz o código correto

[b]- Eu fiz alguma coisa desnecessária ?

-Realmente eu estou usando herança? eu coloquei extends mas eu não consigo visualizar onde que eu to herdando da classe Aluno [/b]

public class Aluno
{
    protected int tipoAluno;
    protected int irmaos;
    
    public Aluno(){
        tipoAluno = irmaos = 0;
    }
    
    public Aluno(int tipo, int irmaos){
        tipoAluno = tipo;
        this.irmaos = irmaos;
    }        
}

public class Mensalidade extends Aluno
{
    double desconto;
    double mensalidade;
    
    public Mensalidade(){
        desconto = mensalidade = 0;   
    }    

    public Mensalidade(int tA, int qtdI){
        super(tA,qtdI);
        int tpAluno = tA;
        int qtd = qtdI;
        
    }
    
    public double calcularMensalidade(int tipoAluno, int qtdIrmaos){
        
        
        if (tipoAluno == 0) 
            mensalidade = 0;
        else
        {
            if (tipoAluno == 1)
                mensalidade = 500;
        }
        
        if (qtdIrmaos == 1)
            desconto=0.05;
        else
        {
            if(qtdIrmaos == 2)
                desconto = 0.1;
            if (qtdIrmaos > 2)
                desconto = 0.15;        
        }
        return (mensalidade - (mensalidade*desconto));
    }

}


public class Principal
{
    public static void main (String args[])
    {
       Mensalidade teste = new Mensalidade ();
       
       System.out.println("A Mensalidade é de "+teste.calcularMensalidade(1,1)+" reais");
    }
}

Creio eu que esse segundo construtor de Mensalidade é desnecessário, mas na dúvida botei, eu sempre tenho dúvida para saber quando tenho que criar construtores e seus parâmetros

Lembre-se que a herança representa a relação é um. E composição a relação tem um.

Então, vamos a pergunta.

Dizemos que: Uma mensalidade é um aluno, ou que um aluno tem um conjunto de mensalidades?

Cara realmente vc está usando errado. Quando vc estende uma classe vc tem em sua classe tdos o métodos e propriedades da sua super classe, isso atendendo aos níveis de acesso dos métodos e das variáveis.
Fica melhor assim:

public class Aluno{ //Os seus dados comuns a todos alunos nessa classe, e um método padrão para o calculo das mensalidade }
E depois vc cria novas classes estendendo a classe aluno, tipo “AlunoX”, e sobrescreve o método de calculo da mensalidade. Fazendo assim, onde vc precisar do calculo dessa mensalidade vc só faz uma chamada ao método calculaMedia do aluno, não precisando passar o “tipo” do aluno.
Dá uma lida na apostila da caelum q vai te ajudar bastante com o java.

http://www.caelum.com.br/curso/fj-11-java-orientacao-objetos/

O tipo de aluno == 0 é o “AlunoBolsista” e o tipo de aluno == 1 é o “AlunoPagante”.

Quanto mais irmãos um AlunoPagante tiver, ele tem desconto maior.

Para um AlunoBolsista é irrelevante saber quantos irmãos tem, já que não paga nada mesmo.

Ahhh eu acho que agora eu entendi, vo tentar refazer depois eu posto aki :wink: vlw galera

Aeee, acho que finalmente consegui, :lol: :

fiz desse jeito agora
coloquei como o Diogo falou, o metodo calcularMensalidade na classe Aluno
E depois criei um classe filha “AlunoX” que no caso é AlunoPago que também poderia ter AlunoBolsista etc e tal.



public class Aluno
{
    protected int tipoAluno;
    protected int irmaos;
    
    public Aluno(){
        tipoAluno = irmaos = 0;
    }
    
    protected double mensalidade;
    protected double desconto;
    
    public double calcularMensalidade(int tipoAluno, int qtdIrmaos){
        
        
        if (tipoAluno == 0) 
            mensalidade = 0;
        else
        {
            if (tipoAluno == 1)
                mensalidade = 500;
        }
        
        if (qtdIrmaos == 1)
            desconto=0.05;
        else
        {
            if(qtdIrmaos == 2)
                desconto = 0.1;
            if (qtdIrmaos > 2)
                desconto = 0.15;        
        }
        return (mensalidade - (mensalidade*desconto));
    }

}

public class AlunoPago extends Aluno
{
 //Sobrescrevi o metodo calcularMensalidade para adequar ao "tipoAluno == 1"(Aluno que paga)
    public double calcularMensalidade(int qtdIrmaos){
        mensalidade = 500;
        
        if (qtdIrmaos == 1)
            desconto=0.05;
        else
        {
            if(qtdIrmaos == 2)
                desconto = 0.1;
            if (qtdIrmaos > 2)
                desconto = 0.15;        
        }
        return (mensalidade - (mensalidade*desconto));
    }
}



import java.util.Scanner;
public class Principal
{
    public static void main (String args[])
    {
       AlunoPago alunoA = new AlunoPago();
       
       //Entrada da quantidade de irmaos
       Scanner input = new Scanner (System.in);
       System.out.println("Quantos irmaos vc tem?");      
       int qtdI = input.nextInt();
       
       double resultado = alunoA.calcularMensalidade(qtdI);
       
       System.out.println("A Mensalidade é de: "+resultado+" reais");
    }
}

Aparentemente está correto.
Já testou no compilador?