Como começar com o seguinte conceito

Olá pessoal, bom dia!
Sou novo aqui no fórum e este é o meu segundo post. Gostei do meu primeiro post, pois recebi várias respostas da minha dúvida.
Quero pessoal, tirar a tarde de hoje para estudar POO com JAVA, claro, quero aproveitar esse tempo para tirar horas bem estudas e nada melhor de ter um bom conteudo para aprendizado.
Alguem conhece alguma apostila boa, Didática e de fato ensina conforme o modelo de programação abaixo:

package Conta;
public class ContaOuro extends ContaCorrente{
	public double limite;
	
	public ContaOuro(){}
	public ContaOuro(String n, int nc, double s, double cpmf, double limite){
		super(n, nc, s, cpmf);
		this.limite = limite;
	}
	
	public void setLimite(double limite){
		this.limite = limite;
	}
	public double getLimite(){
		return limite;
	}
	
	public void informaSaque(double retirada){
		double valor = super.getSaldo() - retirada;
		if((valor + limite) >= 0){
			super.setSaldo(valor);
		}
	}
}


package Conta;
public class ContaCorrente extends Conta {
	public double cpmf;
	
	public ContaCorrente(){}
	public ContaCorrente(String n, int nc, double s, double cpmf){
		super (n, nc, s);
		this.cpmf = cpmf;
	}
	public void setCpmf(double cpmf){
		this.cpmf = cpmf;
	}
	public double getCpmf(){
		return cpmf;
	}
	public void informaSaque(double retirada){
		double retiradaCpmf = retirada + (retirada * cpmf);
		double valor = super.getSaldo() - retiradaCpmf;
		if (valor >= 0){
			super.setSaldo(valor);
		}else{
			System.out.println("Saldo Negativo");
		}
	}	
}

package Conta;
public abstract class Conta {
	public String nome;
	public int numConta;
	public double saldo;
	
	public Conta(){}
	public Conta(String n, int nc, double s){
		nome = n;
		numConta = nc;
		saldo = s;
	}	
		
	public void setNome (String nome){
		this.nome = nome;
	}
	public String getNome(){
		return nome;
	}
    public void setNumConta (int numConta){
    	this.numConta = numConta;
    }
    public int getNumConta(){
    	return numConta;    	
    }
    public void setSaldo(double saldo){
    	this.saldo = saldo;
    }
    public double getSaldo(){
    	return saldo;
    }
    public abstract void informaSaque(double retirada);
    
}

package Conta;
public class ContaInvestimento extends ContaCorrente {
	
	public ContaInvestimento(String n, int nc, double s, double cpmf){
		super(n, nc, s, cpmf);
	}
	public double calcularTarifa(){
		return super.getSaldo()*0.10;
	}
}



package Conta;
import java.util.Scanner;

public class Principal {
	static ContaCorrente cliente;
	public static void main(String []args){
		
		
		String nome;
		int numconta;
		double saldo, cpmf, limite;
		Scanner entra = new Scanner(System.in);
		System.out.println("Digite o nome: "); nome = entra.next();
		System.out.println("Digite a conta: "); numconta = entra.nextInt();
		System.out.println("Digite o saldo: "); saldo = entra.nextDouble();
		System.out.println("1- Conta Ouro / 2- Conta Investimento");
		int op = entra.nextInt();
		if(op == 1){
			System.out.println("Digite o limite: "); limite = entra.nextDouble();
			cliente = new ContaOuro(nome, numconta, saldo, 0.0,limite);
			}else{ if(op == 2){
				System.out.println("Digite o CPMF: "); cpmf = entra.nextDouble();
				cliente = new ContaInvestimento(nome, numconta, saldo,cpmf);
			    }else{System.out.println("Opção Inválida!");}
			}
			System.out.println("Informe o Saque:");
				double saque = entra.nextDouble();
				cliente.informaSaque(saque);
				System.out.println("Conta: " +  cliente.getNumConta() + "Saldo: " + cliente.getSaldo());
	}			
}

Segue o enunciado abaixo:
[color=darkblue]Crie um programa em Java para manipular objetos da classe ContaCorrente criada na questão número 1. Na instâncias de Conta Ouro e de Conta Investimento, lidas a partir do teclado. No final da leitura dos objetos, escreva número da conta no console de saída e informe um saque para cada um dos objetos… Neste momento é obrigatória a chamada do método polimórfico presente nessas classes.
Observação:
? Utilize os métodos de manipulação do objeto para escrever e ler suas propriedades, inclusive na hora de escrevê-las na tela.[/color]

Consegui pessoal por conta própria e material que possuo de estudo, entender o funcionamento de cada metodo, porem quero de fato encaixar cada “linha” de código apresentada acima na minha mente, ter de fato o entendimento e assim poder encaixar caso necessario em outras linguagem.

Desde já agradeço mais uma vez pelas dicas aqui colocadas.
Abraços.

Uma apostila muito boa é a FJ11. Está disponível para download no site da Caelum. A parte de OO é bem explicada e tem, inclusive, em exemplo de contas bancárias nela também. Deve ajudar bastante.

Olá marcobiscaro2112!

Obrigado aí pela dica. :smiley: