Duvida com Orientação de Objetos

Olá pessoal, sou iniciante na linguagem java e estou tendo problemas para compilar o seguinte codigo:


public class TesteContas {
	
  class Cliente{
	    private String nome;
		private String sobrenome;
		private String cpf;
		private int idade;
		
		public void mudaCPF(String cpf){
			validaCPF(cpf);
			this.cpf=cpf;
		}
		
		private void validaCPF(String cpf){
			
		}
	}

  class Conta{
		int numero;
		private double saldo;
		private double limite;
		Cliente Titular = new Cliente(); 
		

		public double getLimite() {
			return limite;
		}
		
		public void setLimite(double limite) {
			this.limite = limite;
		}
		
		public double getSaldo() {
			return saldo+this.limite;
		}
		
		public void setSaldo(double saldo) {
			this.saldo = saldo;
		}
		
		public Cliente getTitular() {
			return Titular;
		}
		
		public void setTitular(Cliente titular) {
			Titular = titular;
		}

		
		public void saca(double valor){
			if (valor>this.saldo+this.limite){
				System.out.println("Saque não efetuado, fora do limite.");
			}else{
				this.saldo -=valor;
			}
		}
		
		void deposita(double valor){
			this.saldo+=valor;
		}
		
		boolean transfere(Conta destino, double valor){
			boolean sacou = saca(valor);
			if (sacou == false){
				return false;
			}
			else {
				destino.deposita(valor);
				return true;
			}
		}
		
  }
  
  class Funcionario{
	  String nome;
	  String cpf;
	  double salario;
	  
	  public void setNome(String nome) {
		this.nome = nome;
	  }
	  
	  public String getNome() {
		return nome;
	}
  }
  
  class Gerente extends Funcionario{
	  int senha;
	  int numeroDeFuncionariosGerenciados;
	  
	  public boolean autentica(int senha) {
		  if (this.senha == senha) {
		  System.out.println("Acesso Permitido!");
		  return true;
		  } else {
		  System.out.println("Acesso Negado!");
		  return false;
		 }
	 }	 
	  
  }
	
	public static void main(String[] args) {		
		Gerente gerente = new Gerente();
		gerente.setNome("Teste");
	}

}

Eu recebo esse erro:

Gostaria de saber onde esta o erro e como eu resolvo…
Grato !

O problema é que sua classe Gerente é uma classe aninhada de TesteContas. Isso significa que para obter uma instância de Gerente você obrigatoriamente precisa de uma instância de TesteContas. Há três maneiras de resolver isso, ou você cria uma instância de TesteContas e a partir dela cria uma instância de de Gerente, ou então você declara as classes Gerente e Funcionario como static, ou ainda você declara as classes como classes não aninhadas mesmo, que me parece ser a solução mais razoável.

1 curtida

declarei as classes como static e funcionou, mas como eu faria para declarar as classes como classes não aninhadas?

Basta declará-las fora da classe. A única restrição é que se elas forem declaradas no mesmo arquivo elas não podem ser public.