Acessando um objeto de outra classe

Boa tarde, estou tentando fazer um projeto Java com três classes
Pessoa
Veículo
Principal

Criei um objeto Pessoa na classe Veiculo, mas na classe main não consigo alterá-lo, crie os gets e sets direitinho, mas não estou conseguindo acessá-lo, alguém poderia me ajudar?
Quero acessar o objeto pessoa, e alterálo, como tambem alterar o objeto veiculo e depois imprimir os dois…

//Classe Pessoa

package br.com.classes; 
public class Pessoa { 

private String cpf; 
private String nome; 
private String sobrenome; 
private int idade; 

public String getCpf() { 
return cpf; 
}

public void setCpf(String cpf) { 
this.cpf = cpf; 
}

public String getNome() { 
return nome; 
}

public void setNome(String nome) { 
this.nome = nome; 
}

public String getSobrenome() { 
return sobrenome; 
}

public void setSobrenome(String sobrenome) { 
this.sobrenome = sobrenome; 
}

public int getIdade() { 
return idade; 
}

public void setIdade(int idade) { 
this.idade = idade; 
}


 
 
//Classe Veiculo

package br.com.classes; 
public class Veiculo { 

private String placa; 
private String marca; 
private String modelo; 
private int ano; 

Pessoa pessoa = new Pessoa(); 

public String getPlaca() { 
return placa; 
}

public void setPlaca(String placa) { 
this.placa = placa; 
}

public String getMarca() { 
return marca; 
}

public void setMarca(String marca) { 
this.marca = marca; 
}

public String getModelo() { 
return modelo; 
}

public void setModelo(String modelo) { 
this.modelo = modelo; 
}

public int getAno() { 
return ano; 
}

public void setAno(int ano) { 
this.ano = ano; 
}

public Pessoa getPessoa() { 
return pessoa; 
}

public void setPessoa(Pessoa pessoa) { 
this.pessoa = pessoa; 
}

}
 
 
//Classe Principal
 
package br.com.classes; 

import javax.swing.JOptionPane; 

public class Principal { 

public static void main(String[] args) { 

Pessoa pessoa = null; 
Veiculo veiculo = null; 

veiculo.getPessoa().setNome(JOptionPane.showInputDialog("Digite o nome do cliente: ")); 
veiculo.getPessoa().setSobrenome(JOptionPane.showInputDialog("Digite o Sobrenome do cliente: ")); 
veiculo.getPessoa().setCpf(JOptionPane.showInputDialog("Digite o CPF do cliente")); 
veiculo.getPessoa().setIdade(Integer.parseInt(JOptionPane.showInputDialog("Digite a idade do cliente"))); 

veiculo.setMarca(JOptionPane.showInputDialog("Digite a marca do veículo: ")); 
veiculo.setModelo(JOptionPane.showInputDialog("Digite o modelo do veículo: ")); 
veiculo.setPlaca(JOptionPane.showInputDialog("Digite a placa do veículo")); 
veiculo.setAno(Integer.parseInt(JOptionPane.showInputDialog("Digite o ano do veículo"))); 

imprimir(veiculo);
}
public static void imprimir(Veiculo veiculo){ 

JOptionPane.showConfirmDialog(null, "Nome: " + pessoa.getNome() + pessoa.getSobrenome() + "\nCPF: " + pessoa.getCpf() + "\nIdade: " + pessoa.getIdade() + "\n\n\nVeículo: " + veiculo.getMarca() + veiculo.getModelo() + "\nPlaca: " + veiculo.getPlaca() + "\nAno: " + veiculo.getAno()); 
}

}

Espero que tenham entendido, não está compilando

Olá Kleidson!

Primeiramente, você deve instanciar um “Veiculo”, para assim você possa trabalhar com a referência deste objeto que está na memória.
Perceba que ele está null.

Segundo, como o pessoa é um atributo de “Veiculo”, chame os valores dentro do método imprimir assim:

JOptionPane.showConfirmDialog(null, "Nome: " + veiculo.pessoa.getNome() + veiculo.pessoa.getSobrenome()
                + "\nCPF: " + veiculo.pessoa.getCpf()
                + "\nIdade: " + veiculo.pessoa.getIdade()
                + "\n\n\nVeículo: " + veiculo.getMarca() + veiculo.getModelo()
                + "\nPlaca: " + veiculo.getPlaca() + "\nAno: " + veiculo.getAno());

Abraço

1 curtida

jzaires, muito obrigado consegui, instanciei um objeto veiculo na principal, e chamei do jeito que vc falou…

Abraço

1° passo - Use identação;
2° passo - Atributo dentro de método fico acessível apenas dentro deste escopo (dentro do próprio método);
3º passo - Objeto objeto = null; se chamá-lo irá dar NullPointerException, é preciso criar uma instância do mesmo;

Alguns ajustes:

[code]package agencia_de_veiculo;

import javax.swing.JOptionPane;

public class Principal {

private static Pessoa pessoa = new Pessoa();

public static void main(String[] args) {
	
	Veiculo veiculo = new Veiculo();
	  
	veiculo.getPessoa().setNome(JOptionPane.showInputDialog("Digite o nome do cliente: "));   
	veiculo.getPessoa().setSobrenome(JOptionPane.showInputDialog("Digite o Sobrenome do cliente: "));   
	veiculo.getPessoa().setCpf(JOptionPane.showInputDialog("Digite o CPF do cliente"));   
	veiculo.getPessoa().setIdade(Integer.parseInt(JOptionPane.showInputDialog("Digite a idade do cliente")));   
	
	veiculo.setMarca(JOptionPane.showInputDialog("Digite a marca do veículo: "));   
	veiculo.setModelo(JOptionPane.showInputDialog("Digite o modelo do veículo: "));   
	veiculo.setPlaca(JOptionPane.showInputDialog("Digite a placa do veículo"));   
	veiculo.setAno(Integer.parseInt(JOptionPane.showInputDialog("Digite o ano do veículo")));
	
	imprimir(veiculo);
}

private static void imprimir(Veiculo veiculo) {
	JOptionPane.showConfirmDialog(
			null,
			"Nome: " + pessoa.getNome() + pessoa.getSobrenome() + "\nCPF: "
					 + pessoa.getCpf() + "\nIdade: " + pessoa.getIdade()
					 + "\n\n\nVeículo: " + veiculo.getMarca()
					 + veiculo.getModelo() + "\nPlaca: "
					 + veiculo.getPlaca() + "\nAno: " + veiculo.getAno());
}

}[/code]

Olá novamente Kleidson!

Apenas para melhorar o seu código:
Altere a acessibilidade do seu atributo pessoa para private;

private Pessoa pessoa;

Se você já possui métodos get/set para manipular tal atributo não há a necessidade de deixá-lo acessível diretamente pela
referência de veiculo, isso é até recomendado, por isso “não deixe os seus atributos expostos, e sim forneça uma interface
de uso para manipulá-los(simplificando, um método)”, encapsulando esse atributo na classe.
Exceto em algum caso específico.

No construtor de veículo instancie a pessoa:

public Veiculo() {  
        pessoa = new Pessoa();
}

Assim, ao invés de chamar os atributos de pessoa desta forma:

veiculo.pessoa.get....

Irá acessá-los de uma forma mais elegante e correta, perceba que você continuará manipulando os dados de “pessoa” normalmente:

public static void imprimir(Veiculo veiculo) {

        JOptionPane.showConfirmDialog(null, "Nome: " + veiculo.getPessoa().getNome() + veiculo.getPessoa().getSobrenome()
                + "\nCPF: " + veiculo.getPessoa().getCpf()
                + "\nIdade: " + veiculo.getPessoa().getIdade()
                + "\n\n\nVeículo: " + veiculo.getMarca() + veiculo.getModelo()
                + "\nPlaca: " + veiculo.getPlaca() + "\nAno: " + veiculo.getAno());
    }

Abraço