La mia comprensione è come di seguito, e non sto dicendo che questo è corretto al 100%, potrei anche sbagliarmi ..
Una variabile è qualcosa che dichiari, che può cambiare per impostazione predefinita e avere valori diversi, ma che si può anche dire esplicitamente come finale. In Java questo sarebbe:
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();
}
}
Quindi, in sostanza, una variabile è tutto ciò che viene dichiarato e può contenere valori. Il metodo foo sopra restituisce ad esempio una variabile. Restituisce una variabile di tipo Integer che contiene l'indirizzo di memoria del nuovo Integer (); Tutto il resto che vedi sopra sono anche variabili, listVariable, aFinalVariableExample e spiegato qui:
Un campo è una variabile in cui l'ambito è più chiaro (o concreto). La variabile che ritorna dall'ambito del metodo foo non è chiara nell'esempio sopra, quindi non la definirei un campo. D'altra parte, iAmAlsoVariable è un campo "locale", limitato dall'ambito del metodo foo, e listVariable è un campo "istanza" in cui l'ambito del campo (variabile) è limitato dall'ambito degli oggetti.
Una proprietà è un campo a cui è possibile accedere / modificare. Qualsiasi campo che espone un getter / setter è una proprietà.
Non conosco l'attributo e vorrei anche ripetere che questa è la mia comprensione di quali variabili, campi e proprietà sono.