Visibilidade, herançça e polimorfismo

Alguem pode me ajudar???

Preciso Saber o que é precisamente…
Quando usar cada um deles
visibilidade, herançça e polimorfismo
e qual as vantageens e desvantagnes???
obg

visibilidade:
public - membros public são visíveis por quaisquer outras classes.
private - são visíveis apenas na sua própria classe (onde são declarados).
protected - são visíveis na classe onde são declarados, nas suas subclasses (herança) e em outras classes no mesmo pacote.

é sempre mais seguro e vantajoso declarar membros private, para proteção de dados (encapsulamento), evitando erros.

herança:
vou explicar com um exemplo: se criarmos uma classe veiculo, podemos ter as classes carro, moto, caminhão, etc, que são tipos de veículos. carro, moto e caminhão são subclasses da superclasse veiculo, e herdam atributos e métodos da superclasse. a superclasse veiculo possui atributos e métodos genéricos que servem a todas as subclasses, enquanto as subclasses possuem atributos mais específicos que servem a seus casos específicos.

polimorfismo:
existem polimorfismo de sobrecarga e de sobrescrita.
de sobrecarga ocorre quando criamos mais de um método com o mesmo nome, porém com assinaturas diferentes (lista de parâmetros).
polimorfismo de sobrescrita ocorre quando criamos um método que sobrescreve outro método que é herdado por uma classe, como pode ocorrer na herança.