Ir ao conteúdo

Java Java: Problemas com Herança múltipla/Interface


Ir à solução Resolvido por Joanderson Pereira,

Posts recomendados

Postado

Estou criando um simples sistema de banco (estudando), nele possuo a classe Conta com alguns métodos e informações básicas da conta (String nome, String cpf, double saldo, getSaldo()), e possuo a classe Sistema onde guardo as contas cadastradas, eu quero criar a classe ContaDiretor que deve ser capaz de estender de Conta (pois é um conta) e de Sistema (será o único a poder alterar variáveis da classe Sistema).

 

Classe Conta

package Conta;

import Banco.Cliente;
import Banco.Data;

public class Conta {
	public int numero;
	protected double saldo;
	public String extrato[] = new String [100];
	public Cliente titular = new Cliente();
	public Data DataDeAbertura = new Data();

	public void depositar (double saldo){
		this.saldo += saldo;

	}

	public double getSaldo(){

		return saldo;
	}



	protected boolean podeSacar(double valor){

		if (saldo < valor)
			return false;
		else
			return true; 

	}

	public void sacar (double valor, Conta conta){
		if (podeSacar(valor)) {

			saldo -= valor;
			System.out.println("Novo Saldo: ");
			System.out.print(conta.getSaldo());
			System.out.println("");

		}    
		else 
			System.out.println("Saldo indisponível");

	}



	public void transferencia (Conta c2){

	}

	public void getExtrato () {

		for (int i = 0; i < extrato.length; i++) {
			if (extrato[i] == null){
				break;
			}
			else
				System.out.println(extrato[i]);

		}



	}

	public void setExtrato(String nome, String atividade, double valor) {

		String extrato = nome + " " + atividade + " " + Double.toString(valor);
		for (int i = 0; i < this.extrato.length; i++) {
			if (this.extrato[i] == null) {

				this.extrato[i] = extrato;
				break;
			}

		}


	}
	public void setExtrato(String nome, String atividade, double valor, String nome2) {

		String extrato = nome + " " + atividade + " " + Double.toString(valor) +" para "+ nome2;
		for (int i = 0; i < this.extrato.length; i++) {
			if (this.extrato[i] == null) {

				this.extrato[i] = extrato;
				break;
			}

		}


	}

	public boolean contaequals(Conta a){

		return (this.titular.login == a.titular.login);        
	}
}

Classe Sistema

package Banco;

import Conta.Conta;

public class Sistema{
	
	public Conta contas[] = new Conta[100];
	public Conta contaPublic = new Conta();
	
	private String nomeBanco = "Banco do Brasil"; //QUERO QUE O DIRETOR SEJA O UNICO CAPAZ  DE ALTERAR NOMEBANCO
	private int totalContas = 0;			//E O UNICO CAPAZ DE RECEBER TOTALCONTAS (FORA A CLASSE SISTEMA)
	
	public String getNomeBanco() {
		return nomeBanco;
	}
	
	public void adicionaConta(Conta conta){

		this.contas[totalContas] = conta;
		totalContas++;


	}

    
    public Conta getConta(int pos) {
    	return contas[pos];
    }
    
    public Conta[] getContaVetor() {//retorna o vetor inteiro
    	return contas;
    }
    
    
}

Conheço muito pouco interfaces, eu tentei criar uma porém descobrir que todas as variáveis em uma interface são "final", ou seja não é possível alterar seu valor. Se eu crio um método abstrato (na interface) setNomeBanco ou getTotalContas, como é que ContaDiretor irá visualizar esses atributos se eles só existem em Sistema?

Não quero deixar NomeBanco e TotalContas public, pois quero que apenas seja possível chamar na classe ContaDiretor e na classe Sistema.

 

Como ContaDiretor terá acesso a duas classes ao mesmo tempo?

 

Segue abaixo o esboço da classe ContaDiretor e da interface InterfaceSistema:

package Conta;

import Banco.InterfaceSistema;

public class ContaDiretor extends Conta implements InterfaceSistema{
	public static String nomeDoBanco;
	
	public void setNomeDoBanco(String nome) {
		this.nomeDoBanco = nome;
		// TODO Auto-generated constructor stub
	}
	
	public String getNomeBanco() {
		
	}
	
	

}
package Banco;

import Conta.Conta;

public interface InterfaceSistema {

	
	public String getNomeBanco();
	
	public void adicionaConta(Conta conta);
	
	public Conta getConta(int pos);
	
	public Conta[] getContaVetor();
	
	
	

}

 

Postado

Interfaces em Java possuem as seguintes características:

  • Interfaces não possuem variáveis.
  • Interfaces não possuem métodos implementados, apenas a declaração de suas assinaturas. A implementação é feita na classe que as implementa a interface.
  • Interfaces não podem ser instanciadas, pois são abstratas (final).
  • Curtir 1
  • Solução
Postado

TÓPICO DUPLICADO**

Interface apenas define o que fazem as classes que a implementam, meu erro realmente foi falta de conhecimento do que era uma interface.

Consegui resolver o problema criando um package para Sistema e ContaDiretor, mudando atributos/métodos como contas[ ] e totalContas para protected.

ContaDiretor continua herdando de Conta e agora tem acesso exclusivo a atributos/métodos da classe Sistema

package Sistema;

import Conta.Conta;

public class Sistema{
	
	protected Conta contas[] = new Conta[100];
	public Conta contaPublic = new Conta();
	
	protected String nomeBanco = "Banco do Brasil";
	protected int totalContas = 0;
	
	public String getNomeBanco() {
		return nomeBanco;
	}
	
	public void adicionaConta(Conta conta){

		this.contas[totalContas] = conta;
		totalContas++;


	}
	//...
}
package Sistema;

import Banco.Banco;
import Conta.Conta;

public class ContaDiretor extends Conta{
	public static String nomeDoBanco;
	
	public void setNomeBanco(String nome) {
		Banco.reg1.nomeBanco = nome;
		// TODO Auto-generated constructor stub
	}
	

 

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Mostrar mais  

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

Mostrar mais  
×
×
  • Criar novo...