Duvidas nas classes e vetores de objetos

Ola pessoal !

Minha duvida é na parte das classes; meu professor da faculdade , pediu para que eu desenvolvesse
um projeto com classes que envolve a classe “pessoa e a classe carro”, assim criando a terceira classe program para instanciar as duas classes, eu implementei aqui o código, mas estou tendo dificuldade de entender as classes quando se trata de criar um vetor de objetos, a minha duvida e tenho que criar um vetor de objeto para cada classe ? no caso a classe pessoa e classe carro ?Pois eu fiz dessa forma criando 2 vetores de objeto, uma para classe pessoa e outro para classe carro será que dessa forma esta certo ? ou tenho que resolver de outro jeito ! pois do jeito que fiz esta rodando ma s tenhos duvidas se e o jeito certo ou nao !

Aqui segue o codigo :

package controle;

public class Pessoa {
private String nome;
private int idade;

public Pessoa(String nome, int idade){
this.idade = idade;
this.nome=nome;

}

public String getNome(){
return nome;
}

public int getIdade(){
return idade;
}
}

package controle;

public class Carro {
private String nome1;
private int ano;

public Carro(String nome1, int ano){
this.nome1=nome1;
this.ano=ano;

}

public String getNome1(){
return nome1;

}

public int getAno(){
return ano;

}
}

package controle;
import java.util.*;
public class Program {
private static final int MAX_RECORDS =50;
private static Pessoa []p = new Pessoa[MAX_RECORDS];
private static Carro []c = new Carro [MAX_RECORDS];

public static void Processador(){
for(int i=0;i<1;i++){
Scanner in = new Scanner(System.in);
System.out.print("Digite seu Nome ");
String nome = in.next();
System.out.print("Digite a sua Idade ");
int idade = in.nextInt();
System.out.print("Digite o nome do Carro ");
String nome1 = in.next();
System.out.print("Digite o ano do Carro ");
int ano = in.nextInt();
Pessoa pessoa = new Pessoa(nome,idade);
Carro carro = new Carro (nome1,ano);
p[i]= pessoa;
c[i]= carro;
}
}

public static void Exibir(){
System.out.println("------------------------------------------------ “);
System.out.println(”\tCadastro de Pessoas e Carros “);
System.out.println(”\tNomep\tIdadeP\tNome1C \tAnoC");

for(int i=0;i<1;i++){
Pessoa pessoa = p[i];
Carro carro   = c[i];

pessoa.getNome();
pessoa.getIdade();

carro.getNome1();
carro.getAno();

System.out.println("\t" + pessoa.getNome()+ "\t" + pessoa.getIdade() + "\t" + carro.getNome1() + "\t" + carro.getAno());
}

}

public static void main(String[]args){
	
	Processador();		
	Exibir();
}	

}

Parece que a solução é nesse sentido mesmo.
As variáveis dos arrays e os métodos da classe Program realmente precisam ser static ?
E acho que vai precisar de duas variáveis pra gerenciar o final lógico dos arrays.

Ola nanoverso !

Primeiramente agredeço por me ajudar !Em relação ao metodos serem static eu não tenho muito conhecimento, apenas segui o modelo da qual o preofessor da faculdade passou, mas agora vou ficar atento a essa questão,porque nao conheço ainda os significados das assinaturas, quanto aos arrays a avariavel final logico tambem desconheço penso eu, que seja o tamanho do vetor, seria isso mesmo ?

Opa,

Ok, é que o static na assinatura dos métodos/variáveis só é usado em casos específicos, será visto nos conceitos de orientação a objetos.
As variáveis pra indicar o final lógico de cada array seriam pra indicar quantos elementos estão realmente preenchidos no array, pois o tamanho do array é fixo (MAX-RECORDS, 50 nesse caso) e somente determina o limite máximo de itens no array e não quantos elementos foram cadastrados.