Problema com Herança

Ola…cá estou novamente…

estou com 1 problema no codigo abaixo.

public static void main(String args[]) {
ContaCorrente conta = new ContaCorrente();
//ContaEspecial conta;
boolean sair = false;

    //chama menu e captura as opcoes digitadas
    do {
        mostrarMenu();
        Keyboard kbd = Console.getInput();

        int tipoConta = 0; // 0 para conta salario e 1 para conta especial
        int opcao = kbd.readInt();
        switch (opcao) {
            case 1:
                System.out.println("Digite o tipo da conta a ser aberta: ");
                tipoConta = kbd.readInt();
                if (tipoConta == 0){
                    conta.abrirConta();}
                else{
                    conta = new ContaEspecial();
                    conta.abrirConta();
                   [b] conta.alterarLimite();[/b] 
                }
                
         [b] meu problema é quando tento executar o metodo "conta.alterarLimite" que existe apenas na ContaEspecial que extends da ContaCorrente, o mesmo não é localizado...[/b]

          o que pode ser ?

Se “conta” é do tipo ContaCorrente, ele não pode acessar os métodos da subclasse ContaEspecial.

Facil:

ContaEspecial outraconta = new ContaEspecial();
outraconta.abrirConta();
outraconta.alterarLimite();

eu não posso re-instanciar novamente conta, sou obrigado a utilizar outro nome ?

O que importa é que para você utilizar o método “alterarLimite()” você tem que ter um objeto do tipo ContaEspecial.

sim, mas não posso re-instanciar um objeto novamente ? dentro de um if ?

O que você poderia fazer é

   if (tipoConta == 0)
   {  
     ContaContacorrente conta;  
     conta.abrirConta();}  
   else
   {  
     conta = new ContaEspecial();  
     conta.abrirConta();  
     conta.alterarLimite();  
   }  

Ou seja, fazer a declaração de “conta” dentro do if.

o problema é que dentro do if “não sei pq” o obj não consegue ser isntanciado.

Pessoal, vamos usar as tags e . Assim, facilita a vida de quem lê os posts.

Seu código tem que ficar parecido com isso:

[code]
public static void main(String args[])
{
boolean sair = false;

//chama menu e captura as opcoes digitadas
do
{
mostrarMenu();
Keyboard kbd = Console.getInput();

  int tipoConta = 0; // 0 para conta salario e 1 para conta especial
  int opcao = kbd.readInt();
  switch (opcao) {
  case 1:
  System.out.println("Digite o tipo da conta a ser aberta: ");
  tipoConta = kbd.readInt();
  if (tipoConta == 0)
  {
     ContaCorrente conta =  new ContaCorrente();
     conta.abrirConta();
   }
  else
  {
     ContaEspecial conta = new ContaEspecial();
     conta.abrirConta();
     conta.alterarLimite();

} [/code]

Testa aí.

as vezes vc esqueceu de algo simples tipo

subclasse extends superclasse…

confere

ja resolvi o problema…

ContaCorrente conta = new ContaCorrente();
ContaEspecial conta2 = new ContaEspecial();

depois

conta = conta2;

resolvido.