É que os dois métodos que você criou vão retornar o mesmo tamanho. O size não te diz quantos elementos do vetor foram preenchidos, e sim qual é o tamanho dele.
na tua classe Questionary teria que ter um indicador que quando ele fosse adicionar, qual é o último preenchido. Tipo assim
public static void main(String[] args) {
Veiculo v = new Veiculo(4);
int i = 0;
while(v.currentPosition() < v.size()) {
v.add("" + i++);
}
}
public Veiculo(int tam) {
length = tam;
texto = new String[tam];
}
private String[] texto = null;;
private static int pos = 0;
private int length = 0;
public int currentPosition() {
return pos;
}
public void add(String texto) {
this.texto[pos++] = texto;
}
public int size(){
return this.texto.length;
}
public int capacity(){
return this.length;
}
Até poderia ser dessa maneira que você fez, mas pensa, se você tiver um array com 1000 posições e toda vez que você chamar o teu método ele vai ter que percorrer o array até encontrar um elemento vazio, daí o desempenho vai lá para o cu do cachorro