Public e private são os modificadores de acesso em POO. Ao definir um atributo ou um método como "public", significa que tal dado pode ser modificado e/ou usado fora da classe assim como dentro dela. Já com "private", o dado só poderá ser modificado e/ou usado dentro da classe.
Geralmente, os programadores definem os atributos de uma classe como privados e os métodos como públicos. Para haver a manipulação das atributos de um objeto fora da classe, são usados os métodos get e set. O primeiro para obter o valor de uma atributo, e o segundo para definir. O get é um método do mesmo tipo do atributo, e retornará o valor dele, e o set é um do tipo void, que terá em seu final uma instrução que modificará o valor da atributo de acordo com o parâmetro recebido. Em ambos os métodos, usa-se o this.
O this é usado para fazer referência à classe. Exemplo: em um método há uma variável local chamada "tamanho", coincidentemente mesmo nome de uma atributo da classe. Para diferenciar a variável "tamanho" presente internamente nesse método do atributo presente em toda a classe, usa-se o this. Em C++, é this->atributo e em Java e muitas outras linguagens, this.atributo. O this também pode ser empregado para localizar métodos.
Não é sempre que o uso do private e do public para respectivamente atributos e métodos ocorre, mas é uma prática comum entre os desenvolvedores. Suponha que haja uma classe Banco com o atributo flutuante saldo, a booleana logado e dois métodos: getSaldo() e setSaldo(flutuante saldo), com essa classe seguindo a lógica mencionada. Nos dois métodos, os quais são as únicas estruturas que podem ser usadas fora da classe, pode-se usar estruturas condicionais dentro deles para checar se o usuário tem permissão para tal atividade, por exemplo verificando se ele está logado, o que de certa forma enriquece o código e pode garantir maior segurança.