Instanciar e Herança

Uma dúvida bem básica MESMO, mas que está me confundindo um pouco:
Qual a diferença entre

Classe minhaDeclaração;

e

Classe minhaDeclaração = new Classe();

Tecnicamente, ambas não criam um objeto da classe Classe do mesmo jeito?

E quanto a herança, pra quê usar a palavra reservada extends se quando eu instancio a variável ela já herda todos os atributos da classe?

Oi.

Sobre sua primeira pergunta, é bem simples. Todas classes em Java são filhas de Object e um Object por default é nulo. Sendo assim, se simplesmente declarar uma classe sem instancia-la, você não tem uma referência a um objeto e portanto terá um NullPointerException, a não ser que esteja realizando acesso estático, mas ai é outra conversa. Mas declarar já instanciando, só deve ser feito caso você tenha certeza disso, pois, se há só um método de sua classe que precisa dessa referência, vale mais a pena instanciar somente na chamada, por exemplo.

Em relação a segunda pergunta, a palavra reservada extends indica que a classe em questão será filha de outra. Sem ela, ela somente será filha de Object.
Era essa a dúvida? Pois realmente, a segunda pergunta ficou confusa no meu ponto de vista.

no primeiro caso. a diferença é que no primeiro voce esta apenas criando o objeto e depois vc inicializa ele.

a palavra extends serve para vc herdar de outra classe, nao tem nada a ver com inicializar ela.

Assim:

Classe minhaDeclaração;  

Aqui vc está declarando um atributo chamado minhaDeclaração para referenciar aos atributos e comportamento do Objeto Classe.

Classe minhaDeclaração = new Classe(); 

Você pode lê isso: que está explicando bem detalhado.
http://www.tiexpert.net/programacao/java/new.php

Vc usa herança quando quer herdar atributos e comportamentos de outro Objeto.

[quote=nel]Oi.

Sobre sua primeira pergunta, é bem simples. Todas classes em Java são filhas de Object e um Object por default é nulo. Sendo assim, se simplesmente declarar uma classe sem instancia-la, você não tem uma referência a um objeto e portanto terá um NullPointerException, a não ser que esteja realizando acesso estático, mas ai é outra conversa. Mas declarar já instanciando, só deve ser feito caso você tenha certeza disso, pois, se há só um método de sua classe que precisa dessa referência, vale mais a pena instanciar somente na chamada, por exemplo.

Em relação a segunda pergunta, a palavra reservada extends indica que a classe em questão será filha de outra. Sem ela, ela somente será filha de Object.
Era essa a dúvida? Pois realmente, a segunda pergunta ficou confusa no meu ponto de vista.[/quote]

Era exatamente isso que eu queria saber, muito obrigado. E obrigado também aos outros que responderam minhas perguntas. Mas a resposta à segunda pergunta me gerou outra dúvida…

MinhaClasse declaração;

é a mesma coisa que

[i]PrimitivaQualquer[/i] declaração extends MinhaClasse

Desculpa se a minha forma de expressar é confusa demais… Eu não conheço muitos termos técnicos e às vezes acabo não me expressando direito. Se não entenderem o exemplo posso tentar exemplificar de outra forma. Obrigado novamente!

[quote=luistonk][quote=nel]Oi.

Sobre sua primeira pergunta, é bem simples. Todas classes em Java são filhas de Object e um Object por default é nulo. Sendo assim, se simplesmente declarar uma classe sem instancia-la, você não tem uma referência a um objeto e portanto terá um NullPointerException, a não ser que esteja realizando acesso estático, mas ai é outra conversa. Mas declarar já instanciando, só deve ser feito caso você tenha certeza disso, pois, se há só um método de sua classe que precisa dessa referência, vale mais a pena instanciar somente na chamada, por exemplo.

Em relação a segunda pergunta, a palavra reservada extends indica que a classe em questão será filha de outra. Sem ela, ela somente será filha de Object.
Era essa a dúvida? Pois realmente, a segunda pergunta ficou confusa no meu ponto de vista.[/quote]

Era exatamente isso que eu queria saber, muito obrigado. E obrigado também aos outros que responderam minhas perguntas. Mas a resposta à segunda pergunta me gerou outra dúvida…

MinhaClasse declaração;

é a mesma coisa que

[i]PrimitivaQualquer[/i] declaração extends MinhaClasse

Desculpa se a minha forma de expressar é confusa demais… Eu não conheço muitos termos técnicos e às vezes acabo não me expressando direito. Se não entenderem o exemplo posso tentar exemplificar de outra forma. Obrigado novamente![/quote]

Tente exemplificar em um código que fica mais fácil de visualizarmos sua dúvida. O extends é realizado quando declaramos a Classe e não um objeto que faça parte da classe, não esqueça disso. Você não pode declarar um extends dentro da classe.

Um exemplo bem bobo então…

Class pessoa{ String nome; String RG; String CPF; } Class aluno { String nome; float nota; }

Como eu declararia um objeto aluno que herdasse os atributos da classe pessoa?

aluno joaozinho = new aluno(); aluno joaozinho extends pessoa;

? Tá errado isso? (imagino que sim DSAIHDSAIIDSAHHIDSAIHSDAD)

Completamente.

Não se pode realizar esse tipo de declaração :slight_smile:
Tu pode ter algo como inner class realizando isso mas não na declaração de uma variável.

Isso dará erro de compilação, basta fazer um teste simples e realizar um javac, se usar uma IDE (Eclipse, por exemplo) já vai lhe apontar erro sem que você precise executar a classe (em tempo de compilação). Lê a apostila de Java básico da Caelum (acho que é a FJ-11), vai lhe ser bem útil.

Abraços.

Certo… Muito obrigado, já conhecia essa apostila da Caelum, e já devo inclusive ter lido a respeito, mas não entendi direito… como seria essa declaração? Como eu faria para aluno herdar os atributos de pessoa?

Então você não leu com atenção colega e recomendo a releitura da mesma, fazendo todos os exercícios propostas e com atenção, vai gostar.
Sua pergunta e sua resposta:

[code]public class Aluno extends Pessoa {

}[/code]

Certo ? Dessa forma, tudo o que pertencer a Pessoa e não for privado, será herdado diretamente por Aluno.
Abraços.

Entendi… A confusão (absurda, diga-se de passagem) que eu fiz é que eu estava pensando que o OBJETO herdava, mas é a CLASSE na verdade… Parece bastante estúpido agora kkkkkkk
Muito obrigado, amigo!