Objetos

Estou com uma pequena dúvida de como criar objetos de uma classe
por exemplo:

ClasseA chama = new ClasseA

aqui eu criei um objeto da ClasseA() e atribui esse objeto a váriavel de instância chama até ai tudo bem simples mais quando eu faço dessa forma
exemplo:

vamos supor que minha classe A é a superclasse da minha classe B
ou posso muito bem fazer isso:

ClasseA chama = new ClasseB();

bem isso da pra fazer mais eu gostaria que alguém me explicasse qual é
a lógica pra min criar objetos dessa forma, neste caso que eu fiz eu criei
uma variável de instância do tipo ClasseA é crei um objeto da classe do tipo ClasseB mas porque intão eu não posso acesso os métodos da classe B…?? alguém sabe me explicar porque isso acontece…?

Porque a veriável é do tipo ClasseA e o objeto do tipo ClasseB. Mas você pode acessar os métodos de ClasseB sim, mas para isso terá que fazer uma conversão:

ClasseA obj = new ClasseB(); obj.metodoClasseA(); (ClasseB(obj)).metodoClasseB();

T+

Vou tentar de passar um exemplo para que fique mais claro.

Existe uma superclasse Pessoa.
Uma subclasse de Empregado.

Então temos a seguinte hierarquia:

Pessoa
l
Empregado

Se vc fizer:

Pessoa pessoa = new Empregado();

Vc criou um objeto Empregado, porém a variável de referência para o mesmo é Pessoa, ou seja, vc só pode usar coisas que ela(Pessoa) pode fazer(métodos). E vc pode fazer isso porque Empregado também é Pessoa(vide hierarquia). Pois segundo ela, Empregado È UMA Pessoa.

Suponhamos que a classe Pessoa possua o metodo andar e empregado trabalhar.

Instanciando como no caso acima, a variável de referência, como eh da classe Pessoa, só pode andar.

Caso fosse:

Empregado empregado = new Empregado();

Vc poderia usar o método trabalhar. Pois agora a variável de referência, como eh da classe Empregado, ela sabe trabalhar.

Bom achu que falei de mais, espero ter ajudado.