Dúvida de Exercício [Dúvida já resolvida, Obrigado!]

Olá a todos…Estou dando sequência ao meu estudo em JAVA e estou em dúvida em um problema que envolve “herança” e “interface”. Implementei uma “Classe Conta” e a tornei abstrata. Depois, “extendi” duas subclasses, isto é, “Class ContaCorrente extends Conta” e “Class ContaPoupanca extends Conta”. Também criei uma “Interface” chamada “Tributavel”. Considerei somente a “ContaCorrente” tributável, ou seja, “Class ContaCorrente extends Conta implements Tributavel”. Por fim há a Classe “TestaConta” que executa a programação. A dúvida é a seguinte: " Eu fiz um polimorfismo na classe ‘TestaConta’ ( referência da Poupança) sem nenhum problema mas , ao tentar fazer o mesmo procedimento de polimorfismo na referencia da ‘ContaCorrente’, houve um erro na hora de chamar o método de ‘calculaTributos’ e o “Eclipse” me forçou(sugeriu) a realizar um ‘CAST’ para que eu pudesse realizar o calculo de tributos. Porque isso aconteceu??? A notação ’ Class ContaCorrente extends Conta implements Tributavel’ não quer dizer ’ A conta corrente ‘é uma’ conta e ‘assina’ Tributavel ??? Porque o polimorfismo não funcionou quando utilizei a interface ‘Tributavel’ ??? ". Alguém pode me ajudar ???

Abs :roll:

[code]abstract public class Conta {

private double saldo = 0;

void deposita(double valor) {

	this.saldo = saldo + valor;

}

public double getSaldo() {

	return this.saldo;
}

}[/code]

[code]public class ContaCorrente extends Conta implements Tributavel {

private double limite = 500; /* cheque -especial */

private double saldo = 0;

void deposita(double valor) {  /*Método subscrito */

	this.saldo = saldo + valor;

}

public double getSaldo() {

	return this.saldo + this.limite;
}

public double calculaTributos(){
	
	return this.saldo * 0.01;
}

}[/code]

[code]public class ContaPoupanca extends Conta {

}
[/code]

[code]public class TestaConta {

public static void main(String[] args) {

	Conta b = new ContaCorrente(); /* Polimorfismo */
	
	Conta c = new ContaPoupanca();/* Polimorfismo */

	b.deposita(1000);
	
	c.deposita(200);
	
	
	System.out.println("Minha Conta corrente com cheque-especial é :" + b.getSaldo());

	System.out.println("Minha Conta poupança é : " + c.getSaldo());
	
	System.out.println("O imposto ou tributo a ser descontado na da conta corrente é :" + ( ((ContaCorrente) b).calculaTributos()));

}

}

[/code]

[code]public interface Tributavel {

double calculaTributos();

}

[/code]

Porque não é a classe Conta que possui o método calculaTributos(), é a classe ContaCorrente, então você só pode chamar o método calculaTributos() de uma variável de referência que possua esse método, se você fizesse o cast para Tributavel também funcionaria. :slight_smile:

Valeu!!! :smiley:

Depois que seu problema tiver resolvido, vá no primeiro post, editar o Título adicionando a tag [RESOLVIDO] no final do Título .