Meu entendimento é o seguinte, e não estou dizendo que isso seja 100% correto, posso estar enganado.
Uma variável é algo que você declara, que por padrão pode mudar e ter valores diferentes, mas que também pode ser explicitamente considerado final. Em Java, isso seria:
public class Variables {
List<Object> listVariable; // declared but not assigned
final int aFinalVariableExample = 5; // declared, assigned and said to be final!
Integer foo(List<Object> someOtherObjectListVariable) {
// declare..
Object iAmAlsoAVariable;
// assign a value..
iAmAlsoAVariable = 5;
// change its value..
iAmAlsoAVariable = 8;
someOtherObjectListVariable.add(iAmAlsoAVariable);
return new Integer();
}
}
Então, basicamente, uma variável é qualquer coisa que é declarada e pode conter valores. O método foo acima retorna uma variável, por exemplo. Retorna uma variável do tipo Integer que mantém o endereço de memória do novo Integer (); Tudo o que você vê acima também são variáveis, listVariable, aFinalVariableExample e explicadas aqui:
Um campo é uma variável em que o escopo é mais claro (ou concreto). A variável que retorna do escopo do método foo não é clara no exemplo acima, portanto, eu não chamaria isso de campo. Por outro lado, iAmAlsoVariable é um campo "local", limitado pelo escopo do método foo, e listVariable é um campo de "instância" em que o escopo do campo (variável) é limitado pelo escopo dos objetos.
Uma propriedade é um campo que pode ser acessado / alterado. Qualquer campo que expõe um getter / setter é uma propriedade.
Eu não sei sobre atributo e também gostaria de repetir que esse é meu entendimento sobre o que são variáveis, campos e propriedades.