Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Dúvidas exercício 04 "Problema não esperado" - Tipo de variável.

public class Pessoa {
    String nome;
    String cpf;
    int idade;
    Endereco endereco;
}

public class Endereco {
    String logradouro;
    String complemento;
    String numero;
    String bairro;
    String cidade;
    String cep;
}

public class Programa {

public static void main(String args[]) {
        Pessoa p = new Pessoa();
        p.nome = "Paulo";
        p.endereco.logradouro  = "Avenida XYZ";  //onde está o erro
    }
}

No exercício diz que não é possível acessar p.endereco.logradouro, pois a classe Endereco não foi instanciada antes, mas na "classe Pessoa" existe uma variável do tipo Endereco... então quer dizer que não é só pq uma variável é do tipo de uma determinada classe que ela automaticamente instancia a tal classe, é isso?

E se instanciasse um objeto de outra classe qualquer nessa variável do tipo Endereco, mesmo que por acaso esse outro objeto também tivesse a propriedade logradouro ou se tentasse atribuir qualquer outro valor que não fosse uma instância da classe Endereco daria erro, correto?

1 resposta
solução!

Isso aí Clayton, pras duas perguntas. Para que a variável endereço tivesse algum valor, seria necessário instanciar um objeto do tipo Endereco e passar pra ela, assim como as outras variáveis, isso nunca é feito automaticamente:

    Pessoa p = new Pessoa();
    p.nome = "Paulo";
    p.endereco = new Endereco(); 
    p.endereco.logradouro  = "Avenida XYZ";  //agora vc pode usar essa linha sem erro

Quanto a segunda pergunta, você não pode passar outro tipo que não fosse Endereco para essa variável, a não ser que essa classe fosse filha de Endereco (Isso tem a ver com herança e acredito que você vá ver mais pra frente, então não se preocupa em entender o que é herança agora). Pra todos os efeitos, nada além de Endereco poderia ser passado, mesmo que esse outro objeto tivesse exatamente os mesmos atributos que Endereco tem. Isso acontece porque Java é uma linguagem fortemente tipada, e como vc declarou o atributo endereco com o tipo Endereco,vc precisa passar um objeto desse tipo:

public class Pessoa {
    String nome;
    String cpf;
    int idade;
    Endereco endereco; //esse atributo é do tipo Endereco
}