Isso é um erro muito grave. É que em C++ existem variáveis que são objetos e variáveis que são referências para objetos; mas em Java todas as variáveis só contém referências para objetos.
Se uma variável é do tipo “Pai”, isso quer dizer que ela pode conter uma referência a um objeto da classe “Pai”, ou então da classe “Filho”. OK?
Não nao pode fica susse, isso nao to confundindo, soh ali na hora de dar os nomes q boiei…
Mas entendi oq vc kiz dizer no final…vlwww…
mas e dai o filho tem acesso aos metodos dele e aos do neto, mas também herdou os metodos do pai.
Entao agora pergunto eu, qual a diferença do filho e do pai, se eles tem conhecimento dos mesmos metodos, levando em conta que o pai enxerga os metodos do filho.
[quote=fr4nc0w]mas e dai o filho tem acesso aos metodos dele e aos do neto, mas também herdou os metodos do pai.
Entao agora pergunto eu, qual a diferença do filho e do pai, se eles tem conhecimento dos mesmos metodos, levando em conta que o pai enxerga os metodos do filho.[/quote]
Objetos podem acessar métodos deles próprios, e aqueles que foram herdados de outros acima na cadeira de herança.
Um objeto mais genérico não pode acessar métodos de objetos mais especializados, ou seja, abaixo na cadeia de herança.
[quote=fr4nc0w][quote=Bruno Laturner][quote=fr4nc0w]Então qual a diferença entre.
Pai obj1 = new Filho(); // Eu só criei um objeto do tipo Pai correto? mas o objeto ainda é filho.
e
Filho obj2 = new Filho(); // Objeto é do tipo filho.
Mas entre criar um objeto do tipo pai ou filho, isso implicará em quais diferenças?[/quote]
A diferença é que você não vai poder acessar as interfaces de métodos que só existem na classe Filho.
[/quote]
Se eu criar um objeto filho do tipo pai neh?[/quote]
Filho do tipo Pai é muito confuso, vou usar exemplo do Mamífero e Cachorro:
Se você criar um objeto Cachorro e atribuí-lo à uma variável do tipo Mamífero, o mamífero não pode fazer coisas específicas de um cachorro.
Caso queira que um mamífero se comporte como um cachorro, há somente duas opções:
Utilizar da coerção para Mamífero se tornar um Cachorro.
Mamifero m = new Cachorro();
Cachorro c = (Cachorro) m; // Você, como programador, está garantindo que este mamífero é um cachorro.
2) Cachorro sobrescrever comportamentos/métodos definidos em Mamífero
[code]public class Mamífero {
public void falar() {
System.out.println("…");
}
}[/code][code]public class Cachorro extends Mamífero {
public void falar() {
System.out.println(“Au au!”);
}
}[/code]Mamifero m = new Cachorro();
m.falar(); // imprime Au Au!
Note que falar não é um método específico de Cachorro, portanto não quebramos as regras.