Problemas com herança

15 respostas
R

Bom dia pessoal, meu problema consiste em que minha variavel, criada na classe Mae, e que esta sendo usada na classe filha e foi implementada nos metodos da classe filha, nao estao ocorrendo, nao consigo achar meu erro, irei postar as 2 classes (mae e filha)

import java.util.*;
public class ContaBancaria {
	int agencia,nro;
	Date abertura;
	protected double saldo;
	
	void creditar(double valor){//soma o valor passado ao saldo
		saldo+=valor;
	}
	void debitar(double valor){
		saldo=saldo-valor;
	}
	void aplicarRendimentos(double juros){
		saldo=((juros/100)*saldo)+saldo;

	}
	double obterSaldo(){//retorna o saldo na conta, ou da conta poupança ou da conta corrente;
		return saldo;
	}
}
public class ContaPoupança extends ContaBancaria {
	int aniversario;
	
	public void debitar(double valor){
		if(valor>saldo){
			saldo=-1;
		}else
			saldo=saldo-valor;
	}
	public void aplicarRendimentos(double juros){
		saldo=((juros/100)*saldo)+saldo;
	}
	

}

Se nao houver nada de errado, posso postar minha main, mais creio que o problema nao esteja nela.

15 Respostas

robertol

Tirando o fato da classe ContaBancaria estar com o modificador faltando o p (deveria ser public e está ublic), não vejo outra razão para erro.

Qual o erro que está aparecendo no console?

A

Lí só o texto que vc escreveu o código ví por cima, não conseguí entender o que vc gostaria que acontecesse, ou se está ocorrendo erro.

paulo1911

Olá roskinha,

Qual a localização das classes em relação aos packages…
estão no mesmo pacote, estão em pacotes diferentes…

e Qual exatamante é o erro que ocorre? uma exception, o valor do saldo não bate com o teste real?..o que ocorre?
Já verificou o escopo da variavel na sua classe main?

Fallow

L

O que está acontecendo exatamente?

Em relação ao comentário do colega sobre o modificador, não ha problema já que ela esta usando o protected.

R

O "ublic" nao era o problema, haha esqueci na hora de postar aki !

Entao ja fiz a maioria das verificaçoes, irei postar minha main

import java.util.*;
public class Main {
	public static void main(String[] args) {
	Scanner entrada = new Scanner (System.in);
	ContaBancaria contab = new ContaBancaria();
	ContaPoupança contap = new ContaPoupança();
	ContaCorrente contac = new ContaCorrente();
	int opcP=0,juros=0;
	double debit=0,credit=0;
	do{
		System.out.println("Digite sua agencia");
		contab.agencia=entrada.nextInt();
	}while(contab.agencia<1000 || contab.agencia>9999);
	do{
		System.out.println("Digite seu saldo atual");
		contab.saldo=entrada.nextDouble();
		
	}while(contab.saldo<=0);
	System.out.println("Sua agencia é "+contab.agencia+" Seu saldo inicial é "+contab.obterSaldo());
	int opc;
	do{
		System.out.println("Digite 1-ContaPoupança,2-ContaCorrente,3-ContaBancaria");
		opc=entrada.nextInt();
	}while(opc!=1 && opc!=2 && opc!=3);
	switch (opc){
		case 1:
			do{
				System.out.println("Digite 1-debitar,2-Aplicar rendimentos");
				opcP=entrada.nextInt();
			}while(opcP!=1 && opcP!=2);
			if(opcP==1){
				System.out.println("Digite quanto deseja debitar");
				debit=entrada.nextDouble();
				contap.debitar(debit);
			}else{
				System.out.println("Digite quanto de juros sera aplicado");
				juros=entrada.nextInt();
				contap.aplicarRendimentos(juros);
			}
				System.out.println("O seu saldo atual é "+contab.obterSaldo());
				break;
		case 2:
			do{
				System.out.println("Digite 1-debitar,2-Aplicar rendimentos");
				opcP=entrada.nextInt();
			}while(opcP!=1 && opcP!=2);
			if(opcP==1){
				System.out.println("Digite quanto deseja debitar");
				debit=entrada.nextDouble();
				contac.debitar(debit);
			}else{
				System.out.println("Digite quanto de juros sera aplicado");
				juros=entrada.nextInt();
				contac.aplicarRendimentos(juros);
			}
				System.out.println("O seu saldo atual é "+contab.obterSaldo());
				break;
		case 3:
			do{
				System.out.println("Digite 1-debitar,2-Aplicar rendimentos,3-creditar");
				opcP=entrada.nextInt();
			}while(opcP!=1 && opcP!=2 && opc!=3);
			if(opcP==1){
				System.out.println("Digite quanto deseja debitar");
				debit=entrada.nextDouble();
				contab.debitar(debit);
			}if(opcP==2){
				System.out.println("Digite quanto de juros sera aplicado");
				juros=entrada.nextInt();
				contab.aplicarRendimentos(juros);
			}if(opcP==3){ 
				System.out.println("Digite quando deseja creditar");
			credit=entrada.nextDouble();
			contab.creditar(credit);
			}
			
				System.out.println("O seu saldo atual é "+contab.obterSaldo());
				break;
		}
	
	}

}

Quando utilizo a classe ContaBancaria(mae) tudo ocorre como desejado, mais quando vou usar as classes filhas que esta ocorrendo o problema, acho que estou esquecendo algum conceito sobre herança

robertol

Acho que pode ser por causa da cedilha em Poupança! Acredito que este caractere não é válido para nomenclatura de classes!

R

Creio que nao, pois nao esta acusando nenhum erro, e a classe ContaCorrente esta com o mesmo problema

robertol

Qual o problema? Cola um pedaço do log que está acusando o erro, por favor!

R

Digite sua agencia 1234 Digite seu saldo atual 1000 Sua agencia é 1234 Seu saldo inicial é 1000.0 Digite 1-ContaPoupança,2-ContaCorrente,3-ContaBancaria 2 Digite 1-debitar,2-Aplicar rendimentos 1 Digite quanto deseja debitar 300 O seu saldo atual é 1000.0 // aqui deveria aparecer o saldo modificado pois escolhi debitar e declarei o valor

robertol

O seu erro é que no final de cada if de tipo de conta vc manda exibir o saldo de contab e não o saldo da conta modificada.

experimente colocar para exibir o valor da conta adequada após a operação! :wink:

A

Tem certeza de que está funcionando conforme vc descreve? Baixei suas classes e o resultado que estou tendo é diferente.

robertol

Altere seu switch para este!

switch (opc){  
        case 1:  
            do{  
                System.out.println("Digite 1-debitar,2-Aplicar rendimentos");  
                opcP=entrada.nextInt();  
            }while(opcP!=1 && opcP!=2);  
            if(opcP==1){  
                System.out.println("Digite quanto deseja debitar");  
                debit=entrada.nextDouble();  
                contap.debitar(debit);  
            }else{  
                System.out.println("Digite quanto de juros sera aplicado");  
                juros=entrada.nextInt();  
                contap.aplicarRendimentos(juros);  
            }  
                System.out.println("O seu saldo atual é "+contap.obterSaldo());  
                break;  
        case 2:  
            do{  
                System.out.println("Digite 1-debitar,2-Aplicar rendimentos");  
                opcP=entrada.nextInt();  
            }while(opcP!=1 && opcP!=2);  
            if(opcP==1){  
                System.out.println("Digite quanto deseja debitar");  
                debit=entrada.nextDouble();  
                contac.debitar(debit);  
            }else{  
                System.out.println("Digite quanto de juros sera aplicado");  
                juros=entrada.nextInt();  
                contac.aplicarRendimentos(juros);  
            }  
                System.out.println("O seu saldo atual é "+contac.obterSaldo());  
                break;  
        case 3:  
            do{  
                System.out.println("Digite 1-debitar,2-Aplicar rendimentos,3-creditar");  
                opcP=entrada.nextInt();  
            }while(opcP!=1 && opcP!=2 && opc!=3);  
            if(opcP==1){  
                System.out.println("Digite quanto deseja debitar");  
                debit=entrada.nextDouble();  
                contab.debitar(debit);  
            }if(opcP==2){  
                System.out.println("Digite quanto de juros sera aplicado");  
                juros=entrada.nextInt();  
                contab.aplicarRendimentos(juros);  
            }if(opcP==3){   
                System.out.println("Digite quando deseja creditar");  
            credit=entrada.nextDouble();  
            contab.creditar(credit);  
            }  
              
                System.out.println("O seu saldo atual é "+contab.obterSaldo());  
                break;  
        }
A

Vc pode tratar a seguinte exception:

Exception in thread "main" java.util.InputMismatchException
R

Obrigado a todos, agora estou com outro problema mais tentarei resolvedo (:

robertol

Pode postar aqui que a gente ajuda como puder! :wink:

Criado 20 de dezembro de 2010
Ultima resposta 20 de dez. de 2010
Respostas 15
Participantes 5